Open kangyana opened 1 year ago
指定一个项目所需的 node 最小版本,这属于一个项目的质量工程。
如果对于版本不匹配将会报错(yarn)或警告(npm),那我们需要在 package.json 中的 engines 字段中指定 Node 版本号:
package.json
engines
{ "engines": { "node": ">=14.0.0" } }
我在本地把项目所需要的 node 版本号改成 >=16.0.0,而本地的 node 版本号为 v10.24.1。
>=16.0.0
v10.24.1
此时,npm 将会发生警告,提示你本地的 node 版本与此项目不符:
npm WARN EBADENGINE Unsupported engine { package: 'next-app@1.0.0', npm WARN EBADENGINE required: { node: '>=16.0.0' }, npm WARN EBADENGINE current: { node: 'v10.24.1', npm: '7.14.0' } }
而 yarn 将会直接报错,提示:
error next-app@1.0.0: The engine "node" is incompatible with this module. Expected version ">=16.0.0". Got "10.24.1"
最为重要的是,项目中某些依赖所需要的 Node 版本号与项目运行时的 Node 版本号不匹配,也会报错(在 yarn 中),此时无法正常运行项目,可避免意外发生。
可看一个示例,engines 示例 (opens new window),其中 ansi-regex 该依赖所需的 node 版本号为 12+,而此时本地的 node 版本号为 10,使用 yarn 安装报错!
ansi-regex
12+
10
// 在 package.json 中,所需 node 版本号需要 >=10 { "engines": { "node": ">=10.0.0" } } // 在 package-lock.json 中,所需 node 版本号需要 >=12 { "node_modules/ansi-regex": { "version": "6.0.1", "engines": { "node": ">=12" } } }
PS: 如果项目的 package.json 中没有 engines 字段,可查看 Dockerfile 中 node 镜像确定项目所需的 node 版本号。
指定一个项目所需的 node 最小版本,这属于一个项目的质量工程。
如果对于版本不匹配将会报错(yarn)或警告(npm),那我们需要在
package.json
中的engines
字段中指定 Node 版本号:一个示例:
我在本地把项目所需要的 node 版本号改成
>=16.0.0
,而本地的 node 版本号为v10.24.1
。此时,npm 将会发生警告,提示你本地的 node 版本与此项目不符:
而 yarn 将会直接报错,提示:
最为重要的是,项目中某些依赖所需要的 Node 版本号与项目运行时的 Node 版本号不匹配,也会报错(在 yarn 中),此时无法正常运行项目,可避免意外发生。
可看一个示例,engines 示例 (opens new window),其中
ansi-regex
该依赖所需的 node 版本号为12+
,而此时本地的 node 版本号为10
,使用 yarn 安装报错!