VsCode 前端调试速速上手指南(二)

背景

上一篇讲了利用 VsCode 进行项目调试的基本操作,但是实际使用中发现一个比较麻烦的事就是,每次启动 chrome 调试前需要先手动把项目跑起来,还有就是手上同时开发多个项目时,node版本管理的问题;我就想有没有办法在调试器启动前自动切换node版本并且运行项目,一番搜索之后发现 VsCode 调试器还个 preLaunchTask 配置,配合 nvm 可以实现;

这篇文章主要讲解如何通过 preLaunchTask 配合 nvm 一键运行项目并启动 VsCode 调试器,为了把文章水长一点学习得更全面,顺便把开发时的 node 版本切换总结一下;完整demo 放在文章末尾;

Node版本切换

n 和 nvm

先来讲讲 node 版本管理,比较常见的就是 n 和 nvm 啦,我的设备是 mac,这里以mac为例;很多老文章写 nvm 不支持 windows,现在已经支持了哈;

n github

nvm github

使用起来非常简单,使用方法网上文章也一大堆就不再赘述啦;

二者主要区别在于

n 是一个 npm 包,我们需要先装一个 node 才能安装 n 以此来安装其它版本的 node,主打一个我管我自己;

image-20230701120807095

而 nvm 是一个独立的软件包,可以单独安装使用;

此外,使用 n 切换版本的时候,它会将指定版本的 node 复制到 node 的默认路径中 /usr/local/bin;

而 nvm 则是将不同版本的 node 安装到 ~/.nvm/<version>/,比如 /Users/dqqbl/.nvm/versions/node/v18.16.0/bin/node

切换版本的时候再修改 $PATH;

两个我都用过,nvm 使用起来更方便,再看看 star 数,该用哪个不用我多说了吧?

image-20230701111840218

这两者虽然都能管理 node 版本,但是每次启动项目前都需要手动在 shell 里执行命令,手动切换到指定的版本,比如nvm use 14 (自动使用合适的 v14 版的node),还是有点麻烦;

nvm 的 README 里有提到,可以通过 shell 脚本的方式实现,每次打开项目目录时自动读取目录下的 nvm 配置文件 (.nvmrc) 切换 node 版本的方式;

但是我还是想单纯的利用 VsCode 实现,所以这里没有采用这种方式

docker 和 voltra

这两种方案都比较偏向团队方面,让团队统一开发环境

docker 如果没有用过还要先学习一下容器和镜像等概念和docker的指令,稍微有一点上手成本;

voltra 是一个 Javascript 的工具管理器,可以通过配置 package.json 给每个项目指定使用的 node 版本,这个就改到项目文件了,而我只想悄悄变强?

二者都不太符合我速速上手的理念,这里贴一下两篇使用介绍

前端切换node版本方案-docker

研发提效:多项目node版本自动切换工具-Volta

preLaunchTask

水完上面的内容,回头看看我们的 vscode 调试器配置;我们想做到的是,launch 到 chrome 前不用手动运行项目,并且能自动切换 node 版本;

其实就是要在调试器启动前执行一段脚本嘛,通过 preLaunchTask 配置可以实现,这个字段的作用是,在调试器启动前,调用 .vscode/tasks.json 里对应的指定脚本;

因此,我们先要创建一段需要执行的脚本,command + shift + p ,输入并选择tasks: configure Task,再随便选一个,比如

image-20230701140504722

vscode 就会给我们生成 tasks.json 文件和 我们所选配置,这些配置是vscode 根据我们的 package.json 文件给出的一些默认配置,我们只是要个模板

{

	"version": "2.0.0",

	"tasks": [

		{

			"type": "npm",
			"script": "start",
			"problemMatcher": [],
			"label": "npm: start",
			"detail": "node scripts/start.js"
		}
	]
}

把 tasks.json 修改一下,我们只配置必须的

{

	"version": "2.0.0",

	"tasks": [

		{

			"type": "shell",
			"label": "nvm-use",
			"command": "zsh -i -c 'nvm use 14 && npm run start'",
			"isBackground": true,
		},
	]
}
  • type 任务类型,比如我们要执行 shell 脚本,用来启动react项目

  • label 任务的名称,用于指定调用该任务

  • command 执行的命令

    • zsh 表示运行 Zsh Shell
    • -i表示以交互式方式运行 Shell。该选项启动一个交互式 Shell 并维持其特性,例如加载配置文件
    • -c 表示在启动的 Shell 中执行后续的命令。后面跟着的是要执行的命令字符串
    • nvm use 14 表示切换到合适的 v14 版 node
    • && 这是 Shell 中的逻辑操作符,表示在前一个命令成功执行后才执行后续命令
    • npm run start 启动 react 项目

    默认情况下 vscode 启动的脚本是非交互式的,如果我们直接写 nvm use 14,是访问不到 nvm 的,所以我们要在前面加上 zsh -i -c

  • isBackground 是否后台运行任务,这里要设置为 true,否则会阻塞后面调试器的启动

配置好 tasks.json, 我们再修改下 launch.json

image-20230701143120180

在最后加上我们刚配置的任务preLaunchTask: "nvm-use",启动调试器

image-20230701143256310

尴尬报错?

image-20230701143502239

这里主要是因为我们没有配置 problemMatcher,这个是用来收集任务执行中的报错等信息并归到 PROBLEMS Tab里用的,我们直接看DEBUG CONSOLE 或者 TERMINAL 就行了,这个用不大上,勾选 Remember my choice for this task ,再点击 Debug Anyway 直接执行即可;

对配置感兴趣的可以看看文末 Task 官方配置链接

image-20230701143629498

自此我们就实现了一键切换node版本,启动react项目,launch chrome 调试啦

Demo

// .vscode/launch.json
{

  "version": "0.2.0",
  "configurations": [
      {
          "name": "debug react",
          "request": "launch",
          "type": "chrome", // 调试器运行环境
          "runtimeExecutable": "canary", // 可执行文件的绝对路径或浏览器版本,如果是浏览器版本需要先下载安装
          "userDataDir": false, // chrome 保存的用户数据目录
          "url": "http://localhost:3000", // 浏览器访问的url
          "runtimeArgs": [
              "--auto-open-devtools-for-tabs" // 启动时自动打开开发者工具
          ], // 启动时携带的参数
          "webRoot": "${workspaceFolder}", // 项目根目录
          "preLaunchTask": "nvm-use"
      },
  ]
}
// .vscode/tasks.json
{

	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "nvm-use",
			"command": "zsh -i -c 'nvm use 14 && npm run start'",
			"isBackground": true,
			// "problemMatcher": []
		},
	]
}

参考

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYCSc3XR' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片