运行环境是 Node12,如何知道用 npm 安装依赖库时应该指定哪个版本号?

2023-01-14 12:26:03 +08:00
 sdjl

我对 node 不是很熟悉,微信小程序的云函数运行在 node12.16 上,但是我的开发电脑是 M1 的 Macbook ,本地安装的是 node16.

我发现,如果我用 npm 安装依赖库时不指定版本号,可能会出现在本地( node16 )正常运行,但上传到云环境(node12.16)后不能正常运行的情况。

我也想过在本地安装一个 node12 ,但发现在 M1 芯片的 Mac 上安装 node12 很麻烦。

所以,我想的是如果用 npm install 依赖库的时候,指定适合 node12.16 这个环境的版本号是不是可以解决问题?

或者,有没有其他更好的办法? 谢谢,我最近刚学用 node ,不是很了解。

4374 次点击
所在节点    Node.js
22 条回复
sdjl
2023-01-14 12:28:01 +08:00
顺便问一下,运行在 node12 下的网络请求库,哪一个比较合适? request? got? axios? node-fetch?
theohateonion
2023-01-14 12:29:59 +08:00
打包上去的云函数因为 package-lock.json 里面指定了 v16 版本 node 的依赖,所以肯定在云函数 12.16 的 runtime 上面跑不起来。最快的做法是用 nvm 保持本地 node 和远端一致,省事不是很折腾。
theohateonion
2023-01-14 12:31:57 +08:00
request 库这种问题请善用 google https://letmegooglethat.com/?q=awesome+node+request
superrichman
2023-01-14 12:41:56 +08:00
直接给云环境升级
Pastsong
2023-01-14 12:44:55 +08:00
node 12 很久就停止支持了,建议升级到 16
xianyu191031
2023-01-14 13:25:55 +08:00
npm install n -g && n 12.16
ysc3839
2023-01-14 13:50:49 +08:00
“在 M1 芯片的 Mac 上安装 node12 很麻烦”
不是有兼容层吗?直接跑 x64 的不行?
ysc3839
2023-01-14 13:52:19 +08:00
不过其实你装了 12 也没用,npm 安装会自动装最新版的库,如果最新版不兼容旧的 Node.js 那你还是得手动调整版本,一般是去看库的文档,有的库也会把 Node.js 最低要求写在 package.json 里。
ysc3839
2023-01-14 13:53:03 +08:00
@sdjl 网络请求的话,我没有特殊需求选 fetch ,有特殊需求选 axios 。
learningman
2023-01-14 14:09:27 +08:00
如果只是想解决
“上传到云环境(node12.16)后不能正常运行“
那装个 babel + webpack ,把 target 设成 node12 不就好了吗
HugoChao
2023-01-14 14:22:27 +08:00
使用 nvm 切换本地 node 版本即可
techmale
2023-01-14 14:37:33 +08:00
基于 `nvm` 的版本控制

1. 通过 `nvm` 下载(或切换)你需要的版本

```bash
# 下载某个版本
nvm install 10

# 临时切换 (当前 shell)
nvm use 10

# 设置默认版本
nvm alias default 16
```

2. 在 `package.json` 中加入你想限定的版本 e.g.

```json
"engines": {
"npm": ">=8.0.0 <9.0.0",
"node": ">=16.0.0 <17.0.0"
},
```

3. 通过配置文件快速切换 (dotfile)

```bash
# 导出当前 Node.js 版本 以供随后使用
nvm version > .nvmrc

# 根据 .nvmrc 切换至相应版本
nvm use
```
sdjl
2023-01-14 14:52:20 +08:00
@superrichman "直接给云环境升级"

升不了吧,这个是腾讯云开发指定的版本。
sdjl
2023-01-14 14:53:59 +08:00
@techmale 谢谢,我了解一下
byp
2023-01-14 14:56:19 +08:00
本地安装 nvm, 随意切换 node 版本很方便
sdjl
2023-01-14 15:07:00 +08:00
谢谢大家,我尝试在 package.json 文件中添加 "engines": { "node": "12.16" } 看看
sdjl
2023-01-14 15:31:07 +08:00
"engines": { "node": "12.16" } 这个不行。。。
sdjl
2023-01-14 15:53:36 +08:00
我用 brew 装了个 nvm
然后用 nvm 安装了 node12.16
安装顺利,没有网上说的麻烦,谢谢大家。
sdjl
2023-01-14 15:54:36 +08:00
@byp “本地安装 nvm, 随意切换 node 版本很方便”

谢谢,用这个办法解决了。
wu67
2023-01-14 17:30:22 +08:00
其实 docker 完美解决这种痛点, 爱装什么哪个就哪个, 直接锁死用生产环境的 node 版本, 不用担心自己想用最新的环境造轮子时发现各种蛋疼.
我们公司的项目就是超过 16.14 就跑不起来, 有个依赖不更新了...暂时又找不到替代, 也没时间去找替代. 入职第二周我就开始折腾出一个 docker 方案了, 唯一的缺点就是跑 docker 费内存...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/908873

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX