本地会开发多个不同的 NodeJS 项目,每个项目可能需要的 Node 版本不同,有的老项目还在用 10.xx ,有的要求 12.xx/14.xx/16.xx/18.xx 。
总之,每个项目都需要不同的 Node 版本。很多时候我都是在启动项目遇到报错了才会意识到要切换 Node 版本。
本地会开发多个不同的 NodeJS 项目,每个项目可能需要的 Node 版本不同,有的老项目还在用 10.xx ,有的要求 12.xx/14.xx/16.xx/18.xx 。
总之,每个项目都需要不同的 Node 版本。很多时候我都是在启动项目遇到报错了才会意识到要切换 Node 版本。
|
1
nvm 了解下,百度不会吗 兄弟
|
|
AllyOct 25, 2023
2
fnm
|
|
cF06myaQ57WHKMBvOct 25, 2023
3
nvm ?
|
|
jackytang520Oct 25, 2023
4
我用 asdf
|
|
5
volta
|
|
hsuyeungOct 25, 2023
6
nvm
|
|
7
devenv
|
|
sparkinglemonOct 25, 2023
8
fnm
|
|
stinkytofuOct 25, 2023
9
nvm 肯定是要用的, 还可以配合 conda 定制各种不同的环境, 不同项目必须要隔离开来, 否则真的是头大
|
|
10
volta
|
|
ComynOct 25, 2023
11
nvm
|
|
12
抱歉,我描述的不是很清楚。
nvm, n 这些版本管理工具我是在用的。 我的问题是: 1. 这些工具都需要你去手动切换 Node 版本,而不能做到启动一个不同的项目可以自动选择指定版本的 Node 来运行(或者是我不知道?)。 2. 当你使用一个不兼容的 Node 版本运行项目的时候,只要等到代码报错,才会意识到 Node 版本有问题。 我知道 package.json 里有个`engines`字段可以指定 Node 版本,但很多项目是没有指定的 https://docs.npmjs.com/cli/v10/configuring-npm/package-json#engines 之前公司是把 Node 和 NPM 的执行文件直接打包到项目中提交到 git 的,这样可以保证每个人都适用正确的版本来运行项目。 |
|
13
把版本切换命令写到 package.json script 里面
|
|
14
|
|
15
@lisongeee
感谢! 看起来 Volta 确实就是我想要的工具,我研究一下 Fast: Install and run any JS tool quickly and seamlessly! Volta is built in Rust and ships as a snappy static binary. Reliable: Ensure everyone in your project has the same tools—without interfering with their workflow. Universal: No matter the package manager, Node runtime, or OS, one command is all you need: volta install. |
|
liuzhaowei55Oct 25, 2023 via Android
16
根目录添加 .nvmrc 内容为 lts/hydrogen
nvm 可以自动切换版本 |
|
ZhaokunZhangOct 25, 2023
17
nvm 每个项目配置 .nvmrc 打开终端就可自动切换到指定版本
https://medium.com/dean-lin/使用-nvm-zsh-script-讓-node-js-版本在不同的專案間自動切換-a8362a509440 |
|
18
|
|
mMartinOct 25, 2023
19
我觉得可以用 conda 管理环境
|
|
20
windows:nvm ( volta 不支持 32bit )
mac:volta |
|
ultimate42Oct 25, 2023
21
我用 fnm 跨平台 项目中创建一个.node-version 文件 里面写个 14/16/18 的版本号就能自动切换 node 版本了
|
|
ChingimOct 25, 2023
22
项目根目录放.nvmrc
cd 进去自动切 |
|
wu67Oct 25, 2023
23
为什么不试试 docker 呢
|
|
xzr97Oct 25, 2023
24
mac 用 n 指令 window 用 nvm
|
|
renmuOct 25, 2023 via Android
25
fnm ,支持 win 下自动切换
|
|
can2421Oct 25, 2023
26
试了一下#18 的方法, 不知道为什么执行 nvm use 的时候显示 Invalid version 。看到 https://blog.csdn.net/weixin_49230250/article/details/131771608#nvm%20use%20%E6%97%A0%E6%95%88%E6%9C%80%E7%BB%88%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88 这个可行。
|
|
27
|
|
ganbuliaoOct 25, 2023
28
n
|
|
thtznetOct 25, 2023
29
用后端的眼光来看前端的工程化做得真是一言难尽,这种库/框架的多版本共存在后端看来根本就不是问题,前端的生态整得真复杂。
|
|
CorybyteOct 25, 2023
30
有一个 npm install n -g
|
|
lifesimpleOct 25, 2023
31
windows nvm
macos n |
|
iuloOct 25, 2023
32
@fancy2020 #15 volta 现在处于没人维护的状态,有段时间没更新了。volta 的想法很好,内部要做很多的 dirty work ,我自己实际用起来和新工具链的配合还有问题,例如 pnpm 目前也没很好的支持,pnpm 本身也无意为 volta 适配。最近我从 volta 迁移出来了,用 fnm 来管理 node ,简单直观
|
|
TsubasaHanekawOct 25, 2023
33
直接放在 wsl 的容器里开发.得了
|
|
34
@iulo
感谢提醒,看了下确实 Volta 的最近提交已经是 4 月份了。另外,刚才安装简单试了一下,它还是会在 package.json 里添加字段的,对工作中团队使用的话会有点侵入性。 fnm 看起来也不错,有时间试试 |
|
OrchestraaOct 25, 2023
35
nix flake
|
|
wonderfulcxmOct 25, 2023
36
docker
|
|
ozzzmOct 25, 2023
38
|
|
lilei2023Oct 25, 2023
39
nvm. n 等等都可以
|
|
darksword21Oct 25, 2023
40
nix flake
|
|
ColdBirdOct 25, 2023
41
nvm
|
|
auroracccOct 25, 2023
42
volta ,不过和 pnpm 配合貌似有些问题
|
|
sn0wdr1amOct 25, 2023
43
|
|
beginorOct 25, 2023 via Android
44
pnpm 也是可以管理 node 的 https://pnpm.io/cli/env
|
|
treblexOct 25, 2023 via iPhone
45
source .env.sh 可以直接写在 npm 命令里
|
|
yechentideOct 25, 2023
46
fnm+1
|
|
zsh2517Oct 25, 2023
47
除了楼上提到的那些之外,我说一下我自己的场景。目前 node18, 20 并存,具体用哪个版本写在了 CI 配置文件里面(因为一些原因有些升级不上去 20 ),找 GPT 写了个脚本 读取 CI 配置文件并且运行 nvm use xxx 。然后设置 alias ,叫做 autoenv 。
进到项目之后 $ autoenv $ npm xxxx 就可以,习惯之后还挺省事的 |
|
kukatOct 26, 2023
48
rtx (asdf 的 rust clone )
one tool to rule them all |
|
BingchunmoliOct 26, 2023 via Android
50
@fancy2020 webstorm 可以,自己的全局管理用的 scoop
|
|
ysmoodOct 26, 2023 via Android
51
|
|
ysmoodOct 26, 2023 via Android
52
|
|
dcsuibianOct 26, 2023
53
fnm+.node-version 文件就可以实现
|
|
iamqiweiOct 26, 2023
54
我的做法是全局的版本一直保持最新,用“export PATH=/D/Node/node-v14.21.1-win-x64:$PATH”给当前会话添加环境变量,就可以指定 node 版本了,缺点就是有时候会忘记加,还要记住不同项目使用的 node 版本,其实用 webstorm 就可以指定项目的 node 版本
|
|
zzerdOct 26, 2023 via Android
55
rtx 啊不但 node python golang 等其它的语言版本也能管理
|
|
LokiSharpOct 26, 2023 via iPhone
56
volta
|
|
yosoroAidaOct 26, 2023
57
nvm
|
|
nijjbaOct 26, 2023
58
用 asdf 的 nodejs 插件,好像可以自动切换 node 版本,它会自动读 .nvmrc 或 .node-version 文件匹配
|
|
nijjbaOct 26, 2023
59
@nijjba #57 不过需要改下 asdf 的配置 https://github.com/asdf-vm/asdf-nodejs#nvmrc-and-node-version-support
|
|
vZexc0mOct 26, 2023
60
直接用 webstorm 就行
|
|
jwz426Oct 26, 2023
61
如果用 vscode 开发的,可以尝试下 devcontainer 。
|
|
3825995121Oct 26, 2023
62
当然是 volta 了 rust 写的
一个项目对应一个 node 版本 nvm 我用的时候老是出问题 安装的时候 还要删除版本什么的 早都放弃了 |
|
zhylOct 26, 2023
63
fnm env --use-on-cd | source # 根据目录下的配置自动切换 node 版本
fnm current > .nvmrc |
|
zackzergzengOct 26, 2023
64
git checkout 后直接做一步 nvm 切换版本吧,husky 有 post-checkout 的钩子可以用
|
|
courtierOct 26, 2023 via Android
65
如果是需要同时开发跑着好几个不同版本 node 的项目,这种情况的话有没什么办法支持
例如我同时要跑只支持 node14 16 18 版本的项目 |
|
tool2dOct 26, 2023
66
我都是用环境变量隔离的,使用前用脚本拉一下对应的环境变量,没觉得有啥不方便。
|
|
mdnOct 26, 2023
67
fnm
.node-version 或 .nvmrc 文件确定项目版本 |
|
gxm44Oct 26, 2023
68
本地 nvm 开发,然后打成 image
|
|
dc2002007Oct 26, 2023
69
有 nvm 又不愿意手动切换,你这个要求是有点高了,要求高,那你就要付出劳动,搞多个版本在 docker 里跑,在本地用 shell 脚本调用不同版本的 npm 路径来执行,gradle 也可以搞,cicd 的 jenkins 发布也是这个道理,前提是你要付出更复杂的劳动,但是如果你只是为了在单机开发调试用,整个团队都这么干,要累死人,所以还有一种方式就是云开发,大家都在云上的 ide 上开发,每个项目选择不同的 ide 去玩,但这些方案都需要付出更多的劳动
|
|
ajanOct 26, 2023
70
就没人用软链接吗?
Windows 、Linxu 、macOS 都可以,下载 nodejs 按目录(版本号)存放, 在 环境变量 或 .bash_profile 中 添加 /dev/nodejs/node.js 再写个脚本命令来切换; ------------------------------------------------------------------ /dev/nodejs/node.js -> /dev/nodejs/v8.9.4-win-x64 ...... /dev/nodejs/v18.12.1-win-x64 |
|
cutiechiOct 26, 2023
71
volta
|
|
JulianEpochOct 26, 2023
72
fnm +1
|
|
73
建议你换个提问方式:先把你百度/谷歌/必应到的,或者其他社区其他渠道获取到的解决方案放到主贴内,抛砖引玉式的寻求更优解,大家也可以根据你的当前认知来提供更细致和全面的回答
|
|
MrYELiexOct 26, 2023
74
fnm
.node-version 写项目需要的版本 |
|
DingJZOct 26, 2023
75
咬咬牙升一波,统一一下。之前用 nvm ,jenkins 上的 nvm 插件总出问题,影响构建效率和心情,后来分析了一波统一升了一次,就不用纠结这事了
|
|
eggrollOct 26, 2023
76
asdf ,每个项目加配置定版本不用手动切换
|
|
Farewell1987Oct 26, 2023
77
nvm
或者 webstorm 运行配置指定 node 版本 |
|
Masoud2023Oct 26, 2023
78
你如果非要听点不一样的答案,那就 docker 吧
|
|
79
如果不肯把全部项目升级到统一版本,我一般就是去 https://nodejs.org/en/download 把各个版本的 zip 包下载解压到不同路径,敲命令时使用绝对路径的 node/npm
|
|
tomyailOct 26, 2023
80
```bash
asdf local nodejs latest:18 git add .tool-versions ``` |
|
qq347891134Oct 26, 2023
81
我是 windows 系统,基于 nvm+我自己写的 vscode 插件-vscode-nvmrc ,切换 vscode 实例时插件去读取 nvmrc 文件执行 nvm use ,
|
|
realJamespondOct 26, 2023
82
直接 source
|
|
realJamespondOct 26, 2023
83
直接 source
export PATH=$NODE_HOME/bin:$PATH |
|
lingyiredOct 26, 2023
84
我使用 Quicker 给 cmder 弄了快捷面板,里面有好几个按钮可以快速 cd 到不同项目。
以上是前提。 然后我使用的是 nvs ,它可以为每一个 cmder tab 终端实例指定一个 node 版本来运行。 然后就是刚才说的快捷面板,我就相当于在 cd 之后,再一次执行 nvs use ,一个快捷动作处理两个事情:cd path/project + nvs use |
|
1t1y1ILnW0x5nt47Oct 26, 2023
85
|
|
shuaiyinOct 26, 2023
86
webstorm 每个项目都可以设置自己的 nodejs 路径,比较方便。
|
|
jiangzmOct 26, 2023
87
用 nvm 启动项目就可以不用手动切换默认 node 版本
nvm run 16 app.js nvm run 18.0 app.js |
|
yigecookOct 26, 2023
88
你的精力够同时应付几个项目?手动切一下很快呀
|
|
amleeOct 27, 2023
89
用 dev container
|
|
DolovOct 27, 2023
90
加一个启动前的脚本切换一下呢
|
|
teddingOct 27, 2023 via iPhone
91
公司项目 node 版本 已经 统一用 volta 管理了 不需要手动切换
|
|
opoetOct 27, 2023
92
|
|
helloWorldzsjDec 15, 2023
94
@guorenjie 借鉴老哥的思路,写了个 Windows 版本 https://github.com/goodnighteveryone/check-node-version
|