一些老项目对 node 版本是有要求的,往往使用默认的新版本包安装不上,scripts 也跑不起来。

之前就遇到过运行一个小程序项目时,根据文档来,第一步安装就出错。本着办法总比问题多的理念,来一个解决一个。问题还真是一个接一个的出现。折腾头天,在解决一个包的运行问题时,发现切换到较低版本的 node 后一切安好。

所以,对于老项目,最好使用兼容性强的版本 8 或 10 的 LTS。

解决问题的根本方法是项目中要对 node 版本进行提示或锁死,否则新人仍会踩坑。

.nvmrc

在项目根目录添加 .nvmrc 文件可指定 nvm 默认的 node 版本。

$ node -v > .nvmrc

在执行 nvm use, nvm install, nvm exec, nvm runnvm which 这些命令时,都会从该文件读取版本信息。

在新的环境下,clone 项目后通过 nvm install && nvm use 就可使用上与项目相匹配的 node 版本。

engines

通过在 package.json 中指定 engines 字段,可限定项目使用的 node 版本,甚至 npm 版本。

不过,通常情况下,配置之后你会发现,该字段只对 yarn 生效:

$ yarn
yarn install v1.22.5
info No lockfile found.
[1/5] Validating package.json...
error test-node@1.0.0: The engine "node" is incompatible with this module. Expected version ">=14". Got "10.22.0"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

而使用 npm 进行安装时,直接成功没有提示,连 warnning 都没有:

$ npm i
npm WARN test-node@1.0.0 No description
npm WARN test-node@1.0.0 No repository field. up to date in 0.48s
found 0 vulnerabilities

根据 npm 文档中关于 engines 的部分,发现要让 npm 识别 engines 字段,还需要配置 engine-strict: true,但是进一步看,

This feature was removed in npm 3.0.0

王德发?

好消息是,进一步研究发现,创建 .npmrc 文件配置如下内容:

engine-strict = true

就可以使得 engines 字段对 npm 生效了。

$ npm i
npm ERR! code ENOTSUP
npm ERR! notsup Unsupported engine for test-node@1.0.0: wanted: {"node":">=14"} (current: {"node":"10.22.0","npm":"6.14.6"})
npm ERR! notsup Not compatible with your version of node/npm: test-node@1.0.0
npm ERR! notsup Not compatible with your version of node/npm: test-node@1.0.0
npm ERR! notsup Required: {"node":">=14"}
npm ERR! notsup Actual: {"npm":"6.14.6","node":"10.22.0"} npm ERR! A complete log of this run can be found in:
npm ERR! /Users/wayongliu/.npm/_logs/2020-09-14T13_43_33_020Z-debug.log

结合之前关于项目中私有 npm 源的设置,所以在项目中添加 .npmrc 真的是最佳实践了。

相关资源

The text was updated successfully, but these errors were encountered:

锁定项目的 node 版本的更多相关文章

  1. eclipse 修改maven项目的jdk版本

      eclipse 修改maven项目的jdk版本 CreationTime--2018年6月8日10点29分 Author:Marydon 1.情景展示 jdk版本太低,如何修改 2.错误方式 第一 ...

  2. Eclipse中修改某个java项目的jdk版本【我】

    Eclipse中修改某个项目的jdk版本,主要有下面4个地方 右键项目名,有如下3个地方 另外如果要在Tomcat中运行,还可能需要设置运行这个项目的Tomcat的容器的 jdk 版本,设置方式:

  3. 限定项目的 Node.js 版本

    限定项目运行所需的 Node.js 版本可保证项目在一个稳定可预期的环境中运行,减少不必要的故障.甚至有些依赖库只能工作于某些版本下.同时,不加以限制的话,在多人合作的项目中恐怕会引起环境不一致带来的 ...

  4. maven命令更新子父项目的pom版本

    Q:一个maven项目,有多个子module,在顶级父pom.xml里设置<version>1.0.0-SHAPSHOT</version>,在子pom.xml里都用了 < ...

  5. Eclipse.修改项目的JDK版本

    1.我实际使用过程中,只是修改了 项目右键-->Properties-->左侧选择"Java Compiler" -->右侧的"JDK Complian ...

  6. 在myeclipse中换项目的jdk版本,你需要做哪些?

    首先,我们必须把jdk在系统中安装好,环境变量配好,才能进行下一步的操作…… 然后在点击项目,右键选择Properties,找到Java Build Path,拉倒最下面,把原来的jdk版本给remo ...

  7. Pycharm使用中背景颜色和更改项目的Python版本

    一.背景颜色 颜色是每一个人都会去更改的,而且可以保护眼睛! 第二步: 选择图中画框的位置,便可以更改背景颜色! 二.项目版本的更改: python2 和 python3 有很大的不同,使用pytho ...

  8. IDEA-Maven项目的jdk版本设置

    在 Intellij IDEA 中,我们需要设置 Settings 中的 Java Compiler 和 Project Structure 中的 Language Level 中的 jdk 版本为自 ...

  9. 有什么类方法或是函数可以查看某个项目的Laravel版本的?

    查看composer.json文件: "require": { "php": ">=7.0.0", "fideloper/p ...

随机推荐

  1. Linux-基础命令学习

    Linux终端 Linux存在两种终端模拟器,一种类MAC的Gnome和一种类Win的KDE 远程连接工具: xshell,putty,crt(网工) 如果在Linux下输入tty 1 wang@DE ...

  2. DOS打开方式

    一.CMD窗口 Ⅰ.普通身份 按下键盘组合键:Windows + R --> 出现'运行'窗口,在'打开'的输入框中输入'cmd' --> 点击确定 打开'开始'菜单 --> 找到' ...

  3. WIFI6 基本知识(一)

    什么是WI-FI6(802.11ax) Wi-Fi 6 是下一代 802.11ax 标准的简称.随着 Wi-Fi 标准的演进,WFA 为了便于 Wi-Fi 用户和设备厂商轻松了解其设备连接或支持的 W ...

  4. 剑指 Offer 41. 数据流中的中位数 + 堆 + 优先队列

    剑指 Offer 41. 数据流中的中位数 Offer_41 题目详情 题解分析 本题使用大根堆和小根堆来解决这个寻找中位数和插入中位数的问题. 其实本题最直接的方法是先对数组进行排序,然后取中位数. ...

  5. ACM STU week3

    STU ACM训练week3(2.5-2.15) By@Xiezeju 训练计划的CP4配套资源库 训练时间安排 定期任务 任务 每日 进行1小时的盲打训练锻练手速 打字网站,最好注册账号以保存进度 ...

  6. Python2021哔哩哔哩视频爬取

    一.找到想要爬取的视频,进入网页源代码 在网页源代码里面可以很容易的找到视频各种清晰度的源地址 二.对地址发送请求 如果对视频源地址发送get请求会返回403 通过按F12进入开发者工具分析 发现并不 ...

  7. 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe

    题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...

  8. Java8的新特性--并行流与串行流

    目录 写在前面 Fork/Join框架 Fork/Join框架与传统线程池的区别 传统的线程池 Fork/Join框架 Fork/Join框架的使用 Java8中的并行流 写在前面 我们都知道,在开发 ...

  9. java实现一个点餐系统

    转载于blog.csdn.net/weixin_44219955 项目大体框架 菜品类(菜品id,菜品名,菜品类型,上架时间,单价,月销售,总数量) 管理员类(管理员id,账号,密码) 客户类(客户i ...

  10. 攻防世界 reverse Guess-the-Number

    Guess-the-Number  su-ctf-quals-2014 使用jd-gui 反编译jar import java.math.BigInteger; public class guess ...