V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sdjl
V2EX  ›  Node.js

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

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

    我对 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   ·   实用小工具   ·   1001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:44 · PVG 05:44 · LAX 13:44 · JFK 16:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.