使用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 的配置,还顺便复习了一下环境变量和模块化的知识 ------ 村头一只鹅鹅

相关推荐
gqkmiss16 分钟前
Chrome 浏览器 131 版本开发者工具(DevTools)更新内容
前端·chrome·浏览器·chrome devtools
Summer不秃21 分钟前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰26 分钟前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter
Viktor_Ye32 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm34 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
Amd7941 小时前
Nuxt.js 应用中的 webpack:compiled 事件钩子
前端·webpack·开发·编译·nuxt.js·事件·钩子
生椰拿铁You1 小时前
09 —— Webpack搭建开发环境
前端·webpack·node.js
狸克先生2 小时前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互