Nodejs 前端多版本问题你是如何解决的,还有您是本地开发还是远程开发
随着不同年代的项目,由于依赖的限制,有些支持的 node 版本比较低,有些又需要比较高。
目前网上大家的解决方案:
- window nvm 多版本管理
- n
如果我想要同时开多个项目的话,就比较麻烦,而且每次都得来回切换。 目前的我的开发都尽量避免在本地环境开发,毕竟没有几个公司能给你 64GB 的内存
Docker 解决 Node 多版本问题
优点:
- 再也不需要手动去切
- 将需求通过 Dockerfile 写好,后续只需要构建,构建的命令写成 shell ,比如我通过 Makefile
- 通过目录挂载解决模块缓存问题
- 由于在口罩期间,刚好可以结合远程开发
缺点:
- 运行时得调用 docker 命令
- 还得配置一堆变量挂载,映射端口
- 尤其是后面的有些项目都不去认这个 PORT 环境变量了,得自行修改调整
经过我这两年的项目实践,我将docker node 多版本操作进行了整理
- 将操作 docker 的命令这些封装成 shell
- 环境变量 刚好放到 .env.development中,比如后端 ip 域名,暴露端口等
- 运行,直接运行 shell 脚本,当然为了让脚本更简洁,我将常用的命令封装成 Makefile
具体实例请查看:https://github.com/miss55/docker-node/blob/main/README-zh.md#%E4%BE%8B%E5%AD%90
配合 vscode 的 Remote 扩展 进行远程开发
搜索 vscode 扩展,关键字: Remote Development
,看着自己的需求添加相应的扩展即可
具体教程可以参考vscode 官网的教程
简单教程:
- 新开一个 vscode [ ctrl + shift + n ]
- 连接到服务器 [ ctrl + shift + p ] + [ connect to host ]
- 如果还没配置,则选择 Add New SSH Hosts 去添加即可
- 连接成功后,如果没有选择项目目录,则可以自行选择
Nodejs 前端多版本问题你是如何解决的,还有您是本地开发还是远程开发
命令行用 fnm
win 界面用[nvm-desktop]( https://github.com/1111mp/nvm-desktop)
docker 不是有 devcontainer 么
nvm 香,就是不同项目需要的 pnpm 需要显式指定
volta
开发阶段 nvm 完全没烦恼,不同项目放置一个自己的 nvmrc 文件,打开的时候 nvm use 。然后都能保持不同的 node 版本互不干扰。比 docker 好用多了。
用的 nvs ,nvs 的 node 版本环境只在当前 cmd 窗口有效。也就是可以多个 cmd 同时使用多个 node 不同的版本。
然后使用 Quicker 绑定了很多命令,每次打开 cmder ,就使用 Quicker 的单个快捷键输入多个命令,分别是:
cd /path/to/project
nvs use node/x.y.z/x64
这样就进入刚项目的同时切换到对应的 node 版本了,这个 node 版本只在当前 cmd 窗口有效。
用 vagrant 上虚拟机 homestead ,在 ubuntu 里面装 nvm ,nvm 会把 node/npm/yarn/pnpm/pm2 这些装到 /root/.nvm/${version}/node/bin 下面,启动项目的时候指定一下用的哪个 npm/yarn/pnpm 就可以了(你可以在 package.json 里面指明),这样可以实现同时运行多个版本的 node
虽然是虚拟机,但是是命令行的,性能完全够的,一点也不卡
Devbox 或者 nix shell ?
一般不会有太多 node 版本装两个 wsl 就够用了
我用的 Jetbrains WebStorm 开发的,可以在工程配置中自由选择 Node 解释器版本,平时一般用不上 nvm 来切换版本
volta+1
volta ,目前在 windows 上和 linux 上都没遇到什么问题
Remote Development 套件确实有,不过有时候我就懒得重复配置,我希望在一个地方配置,其他地方就不关心。所以我专注放到 .env.development 配置
本地开发 volta ,最能避免 lz 的手动切换问题
我用 vfox
用的 mise 来管理 node ,python ,go 等多版本的问题
nvm ,本地开发,8G 内存,来回切换确实麻烦点,但是也能接受
fnm ,也就是 Fast Node Manager 。这个很好用,可以在项目文件夹下面放一个.node-version 文件,这样 cd 进去时就自动切换到对应的版本了。
volta+1
nix
emacs tramp
volta +1
手动临时变更环境变量
有.nvmrc 不就会自动切版本了吗
确实是我对 nvm 研究没那么深入,之前在 window 上出现切换需要权限问题,后面就放弃多版本切换,恰好当时还比较喜欢完 docker 就想着直接丢到 docker 上,如此以来需要什么依赖跟宿主机就没关系了,在一定程度上保证宿主机的干净
node 小白问个问题,我引入一个库 npm install 之后
162 vulnerabilities (1 low, 92 moderate, 66 high, 3 critical)
然后 npm audit fix --force
node 小白问个问题,我引入一个库 npm install 之后
162 vulnerabilities (1 low, 92 moderate, 66 high, 3 critical)
然后 npm audit fix --force
变成
8 vulnerabilities (2 moderate, 6 high)
应该怎么解决
#5 不是有个命令叫 reload window 吗,可以试试
用 prebuilt binaries 不就行了,把 node 命令换成绝对路径,想要哪个用哪个,
npm 常规操作,能跑没什么好解决的,无非就是一些包过时了或有一些安全问题被扫到了。
非要解决就升级风险包到 latest ,不过升级是一件费力不讨好的事。另外如果最新的包还有安全问题,就换个。
其实只要能跑,不用管这个 vulnerabilities 是 low ,mediate, high, critical 是吗?谢谢
我是用 nvm ,在不同项目放不同的 .nvmrc 文件,.nvmrc 文件声明版本号,cd 到任意目录 nvm use 就能跑。
然后在 packages.json 声明 engines 指定版本,这样忘记 nvm use 执行 npm 相关命令会报错。
感觉是个不错的方式,从 14 到现在的 20 ,版本问题其实挺头疼的,现在启动项目都要问一嘴用什么版本。显式的配置文件去声明版本是一个很好的方式呀哈哈哈
一直用的 nvm ,以前觉得挺卡的,后来换成 fish 后觉得还行
目前的我的开发都尽量避免在本地环境开发,毕竟没有几个公司能给你 64GB 的内存。
远程开发我感觉还更加不爽。。。本地台式机器 64GB ,很容易呀。
nvm + nvmrc + zsh vvm auto use
直接把 node 安装到项目目录不就可以了吗?几行 shell 脚本的事儿
可以参考 gradle 的 toolchains
可以使用 vscode 的 dev container, 结合 docker 使用
为了方便,还以在 scripts 中加一个 predev 或 prestart 执行 nvm use
nvm + 项目根目录 .nvmrc 声明版本 + shell 脚本检查当前目录 .nvmrc 文件自动切换 node 版本,个人体感最佳。接手新项目先问清 node 版本,狠狠地塞一个 .nvmrc 文件后面就全自动切换了
volta
用 nvm 装到系统路径里,不同项目内使用 webstorm 的 run config 来选定对应版本,要运行命令的时候就从图形化界面点一下 run
我选择用 fnm ,包括 Windows 也用
目前用的 vfox ,有多平台和多语言支持,不止 nodejs
是的。node 包只要装成功了没输出 ERR 报错就能跑,npm 其实有个选项可以关闭 audit
哦哦,谢谢
在使用 nvm 管理 nodejs 的版本之后,会发现 包管理器 的版本用 corepack 来做管理就会出现问题。在用 nvm 之后,npm 的版本会跟随 nodejs 版本切换而切换,但是 corepack 安装的 pnpm 缺无法自动切换了。
导致的结果是可能会用上了不兼容的 nodejs 和 pnpm 版本。不知道有什么好的实践方式?
能想到的是通过环境变量 COREPACK_HOME 来隔离不同的 corepack 安装路径
以前用 nvm ,现在换 fnm 了,很好用。包管理器用 corepack 来管理
corepack 是只要安装一个版本的吗?例如 pnpm ,我 node 切换不同的版本,Pnpm 的支持版本也是会变的吧,我现在 nvm 说是每切换一个 node 版本,pnpm 这些都是需要重新安装的
我现在的用法是安装一个系统级 nodejs-lts ,这个可以通过包管理器比如 Windows 上的 scoop 来管理更新,然后用这个 node-lts 的 corepack 来使用 pnpm 或者 yarn 之类的,然后用 fnm 管理不同版本的 node 版本。
asdf
pnpm env use x.x.x -g
volta ,node 版本锁死在 package.json 里会自动切换
我目前是纯 node 在虚拟机里面写;小程序这种需要本地 UI 的,本地写; windows 下还是 nvm 切换。尽可能保证统一的 node 版本。
用 vlota 显式 pin 一下对于多项目不同版本的场景比较方便
volta+1
多项目管理非常方便
nvm 转到 vfox 了
volta 暴打所有手动切版本和 CD 切版本
我给你一个思路,同样的问题,gradle 的解决方案是 Gradle Wrapper,理论上应该有一个 node Wrapper 来自动处理这个事情
win 切换不了
针对Node.js前端多版本问题,我通常采用以下几种方法来解决:
一、使用nvm(Node Version Manager)
nvm是一个强大的Node.js版本管理工具,允许在同一台机器上安装并管理多个Node.js版本。使用nvm,可以轻松安装、切换和管理不同版本的Node.js。例如:
# 安装nvm
# (具体安装命令省略,可参考nvm官方文档)
# 使用nvm安装指定版本的Node.js
nvm install <version>
# 切换Node.js版本
nvm use <version>
二、在项目中指定Node.js版本
在每个项目的根目录下创建一个package.json
文件,并在其中指定项目所需的Node.js版本。这样,当进入项目目录并运行npm install
时,npm会自动检查并安装所需的Node.js版本。例如:
{
"name": "my-project",
"version": "1.0.0",
"engines": {
"node": "14.17.0"
}
}
三、开发环境
我通常更倾向于本地开发,因为这样可以确保开发环境的稳定性和可控性。不过,在需要远程协作或访问特定资源时,也会使用远程开发环境。
综上所述,通过nvm和项目中指定Node.js版本的方法,可以有效解决Node.js前端多版本问题。同时,根据实际需求选择合适的开发环境,可以提高开发效率和项目稳定性。