运行环境是 Node12,如何知道用 npm 安装依赖库时应该指定哪个版本号? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sdjl
V2EX    Node.js

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

  •  
  •   sdjl 2023-01-14 12:26:03 +08:00 4780 次点击
    这是一个创建于 1007 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    谢谢,我的运行环境是微信小程序云开发,版本号是微信指定的,我改不了,也用不了 docker
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1204 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 17:45 PVG 01:45 LAX 10:45 JFK 13:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86