我对 node 不是很熟悉,微信小程序的云函数运行在 node12.16 上,但是我的开发电脑是 M1 的 Macbook ,本地安装的是 node16.
我发现,如果我用 npm 安装依赖库时不指定版本号,可能会出现在本地( node16 )正常运行,但上传到云环境(node12.16)后不能正常运行的情况。
我也想过在本地安装一个 node12 ,但发现在 M1 芯片的 Mac 上安装 node12 很麻烦。
所以,我想的是如果用 npm install 依赖库的时候,指定适合 node12.16 这个环境的版本号是不是可以解决问题?
或者,有没有其他更好的办法? 谢谢,我最近刚学用 node ,不是很了解。
1
sdjl OP 顺便问一下,运行在 node12 下的网络请求库,哪一个比较合适? request? got? axios? node-fetch?
|
2
theohateonion 2023-01-14 12:29:59 +08:00 1
打包上去的云函数因为 package-lock.json 里面指定了 v16 版本 node 的依赖,所以肯定在云函数 12.16 的 runtime 上面跑不起来。最快的做法是用 nvm 保持本地 node 和远端一致,省事不是很折腾。
|
3
theohateonion 2023-01-14 12:31:57 +08:00
request 库这种问题请善用 google https://letmegooglethat.com/?q=awesome+node+request
|
4
superrichman 2023-01-14 12:41:56 +08:00 via Android
直接给云环境升级
|
5
Pastsong 2023-01-14 12:44:55 +08:00
node 12 很久就停止支持了,建议升级到 16
|
6
xianyu191031 2023-01-14 13:25:55 +08:00
npm install n -g && n 12.16
|
7
ysc3839 2023-01-14 13:50:49 +08:00 via Android
“在 M1 芯片的 Mac 上安装 node12 很麻烦”
不是有兼容层吗?直接跑 x64 的不行? |
8
ysc3839 2023-01-14 13:52:19 +08:00 via Android
不过其实你装了 12 也没用,npm 安装会自动装最新版的库,如果最新版不兼容旧的 Node.js 那你还是得手动调整版本,一般是去看库的文档,有的库也会把 Node.js 最低要求写在 package.json 里。
|
10
learningman 2023-01-14 14:09:27 +08:00
如果只是想解决
“上传到云环境(node12.16)后不能正常运行“ 那装个 babel + webpack ,把 target 设成 node12 不就好了吗 |
11
HugoChao 2023-01-14 14:22:27 +08:00
使用 nvm 切换本地 node 版本即可
|
12
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 ``` |
13
sdjl OP |
15
byp 2023-01-14 14:56:19 +08:00 1
本地安装 nvm, 随意切换 node 版本很方便
|
16
sdjl OP 谢谢大家,我尝试在 package.json 文件中添加 "engines": { "node": "12.16" } 看看
|
17
sdjl OP "engines": { "node": "12.16" } 这个不行。。。
|
18
sdjl OP 我用 brew 装了个 nvm
然后用 nvm 安装了 node12.16 安装顺利,没有网上说的麻烦,谢谢大家。 |
20
wu67 2023-01-14 17:30:22 +08:00
其实 docker 完美解决这种痛点, 爱装什么哪个就哪个, 直接锁死用生产环境的 node 版本, 不用担心自己想用最新的环境造轮子时发现各种蛋疼.
我们公司的项目就是超过 16.14 就跑不起来, 有个依赖不更新了...暂时又找不到替代, 也没时间去找替代. 入职第二周我就开始折腾出一个 docker 方案了, 唯一的缺点就是跑 docker 费内存... |
21
DICK23 2023-01-14 21:54:53 +08:00
nvm install 12 然后运行,另外都已经到 12 了,直接升 16lts 也没啥问题
|