使用vscode调试typescript随便复习了模块化这件事

背景

最近我在使用 typescriptleecode 的时候,想对编写的代码进行调试,下面以最快的方式来配置调试以及对环境变量和模块化的思考

配置方式

1、生成 launch.json 文件

使用 TypeScript Debugger 插件

在插件市场中找到这个 TypeScript Debugger 插件,他会帮助我们快速生成针对 tslaunch.json

点击旁边 "运行和调试 ",再点击 "创建 launch.json "

会在中间出现选择框,选择 TS Debug

可以在根目录下看到 .vscode/launch.json

手动添加

如果说:"不嘛,我不想下载,添加那么多插件,会导致........(省略1000字)",

你不想下载的话,也可以在工作区目录 下手动创建添加 .vscode/launch.json

json 复制代码
{
  // 使用 IntelliSense 了解相关属性。
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "ts-node",
      "type": "node",
      "request": "launch",
      "args": ["${relativeFile}"],
      "runtimeArgs": ["-r", "ts-node/register"],
      "cwd": "${workspaceRoot}",
      "internalConsoleOptions": "openOnSessionStart"
    }
  ]
}

2、运行调试

首先我们需要手动安装库 npm i ts-nodenpm i typescript -g

我们执行完上面的命令之后,在代码中打上断点 ,再次回到运行和调试,点击左上角绿三角即可运行调试

这样我们就可以愉快的调试了,这就是一套流程,是不是很简单

如果你和我一样有强迫症,为啥我调试还需要本地安装 ts-node 库才能使用,我就想用全局的,保证项目目录的纯洁性,只想保留算法的代码,那么继续往下看

不使用本地安装的ts-node库来调试

很多长的帅的人要说:"好难受啊!!!为啥我调试还要手动在本地安装 ts-node 库,为啥不能使用全局的"我只能很遗憾的说,有解决方法

我们知道在点击 开始调试 的时候默认执行的是下面的命令,简单来说的话就是node -r ts-node index.ts,它的意思分别是:

  • node: 这是执行 nodejs 程序的命令。
  • -r: nodejs 的一个选项,用于在运行脚本之前预加载指定的模块。在这个命令中,-r 选项后面紧跟着要加载的模块,即 ts-node
  • ts-node: 这是一个 nodejs 模块,它允许您直接运行 TypeScript 代码而无需先将其编译为 JavaScript。ts-node 在运行脚本之前会动态地将 TypeScript 代码编译成 JavaScript。
  • index.ts: 这是要执行的 TypeScript 文件的路径

好,道理我也懂了,现在来实践,把ts-node的本地库给删了,我记得老师说过,根据nodejs的默认调取规则会找到全局,什么webpacknodemon都是这样干的

结果是找不到,纳尼,找不到,不可能啊!!!当然是有解决方法,参考下面的内容

1、配置环境变量 - 推荐

好,肯定是那里出现了问题,让我们来回想一下,为啥可以使用nodemon等命令

我们进入到环境变量 里面可以看到NVM_SYMLINK,进入到指定的地址,可以发现有对应的指令,哦~,这就是为啥可以执行全局的命令,但是我的 ts-node 为啥不见了

注意 :我默认使用 nvm 来管理的 nodejs,如果没使用的话大概率是下面的结构(最新版的nodejs好像不一样)

我们来重新看一下执行的指令是啥node -r ts-node index.ts,可以看到加上了-r,我感觉是这个问题,进入到 nodejs 的官网看看是啥意思

可以看到它会预加载指定模块,也就是使用的 require 来加载的模块

我们都知道 require 也是有加载规则的,我们输入 node 进入到 REPL 模式,可以在 module.paths 中看到加载的顺序

注意REPLRead-Eval-Print Loop的简称,翻译为**"读取-求值-输出"循环**。REPL是一个简单的、交互式的编程环境。我们在浏览器的控制台就是标准的 REPL

我们可以发现没有我们全局库的地址,所以只要加上全局库的位置信息即可,这就需要配置环境变量 NODE_PATH,地址就根据你的环境来添加即可

如果不只是添加这个地址,还有其他位置就在 里面通过 ; 间隔添加地址即可,比如:C:\Program Files\nodejs\node_modules;C:\node_modules

我们这样配置的话就加入进入了

再次启动调试,既可正常调试

2、借助环境变量参数

如果不想使用环境变量的方式来做,还有其他方式

略加思考就可以知道其实本质就是指向全局 ts-node 的库的地址,如果我手动添加地址呢?其实是可以的,我们输入npm config get prefix,可以看到地址,再在后面添加 node_modules 就行了

我们再将地址写进去就行了,这是最简单的

但是这种方式不优雅,我如果修改了 nodejs 的位置岂不是都要修改,我要想其他方式。

你说有没有一个变量,可以指向这里的呢?现在的问题就变成了,找到这个变量,在我苦苦思索之后,找到了。我们在控制台可以打印环境变量中的值(注意,这里不能使用 git bash,不然找不到)

那我把这个变量注入进入进行拼接不就完了,那就干

参考下图,使用成功,NICE~,我简直就是天才,现在把他迁入到 Vscode 里面

修改完之后,卧槽,怎么用不了,怎么没有注入进去,呜呜呜,可能 vscode 做了其他处理吧

又经过一顿查之后,发现可以用下面这个方式来做,成功运行调试,可以开心的写题目了

总结

在TypeScript代码调试过程中,我们可能会遇到ts-node模块找不到的问题。这通常是由于环境变量配置不当或Node.js管理工具(如NVM)的影响。尽管全局安装了ts-node,但在执行命令时仍可能无法找到该模块。为了解决这个问题,我们需要检查环境变量和Node.js管理工具的配置。

在Node.js中,模块加载遵循一定的规则,并且可以通过设置环境变量NODE_PATH来指定全局库的地址。然而,简单地修改Node.js的位置并不是最佳解决方案,因为这可能需要频繁更改配置。更好的方法是使用环境变量来注入地址,以确保模块的正确加载。 在Vscode中,我们可能会发现环境变量未正确注入,导致调试失败。为了解决这个问题,我们可以尝试不同的配置方法,如通过安装TypeScript Debugger插件或手动创建.vscode/launch.json文件来配置调试环境。同时,确保安装了ts-node库并正确配置了环境变量,以便在调试过程中能够顺利运行和加载模块。

总之,通过合理配置环境变量和使用适当的调试工具,我们可以解决TypeScript代码调试中遇到的ts-node模块找不到的问题。这将使我们能够更愉快地进行代码编写和调试,提高开发效率。 ------ OPEN AI GPT

这次的探索让我熟悉了一下 launch.json 的配置,还顺便复习了一下环境变量和模块化的知识 ------ 村头一只鹅鹅

相关推荐
徐子颐5 分钟前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭17 分钟前
如何理解HTML语义化
前端·html
jump68040 分钟前
url输入到网页展示会发生什么?
前端
诸葛韩信44 分钟前
我们需要了解的Web Workers
前端
brzhang1 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu1 小时前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花1 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋1 小时前
场景模拟:基础路由配置
前端
六月的可乐1 小时前
实战干货-Vue实现AI聊天助手全流程解析
前端·vue.js·ai编程
一 乐2 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习