限定项目的 Node.js 版本

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

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

为项目指定 Node.js 的版本可通过版本管理器,或者通过 package.json 中添加相应属性来实现。

nvm
管理 Node.js 的版本最好可通过相应的版本管理器来完成,比如 nvm。用法在 nvm --help 中描述得很详尽。

通过在项目根目录创建一个 .nvmrc,其中写上需要的 Node.js 版本号。这个版本号不一定是数字,可以是 nvm 能够理解的其他别称,详见 nvm --help 中对 的描述。

Note: refers to any version-like string nvm understands. This includes:

full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
default (built-in) aliases: node, stable, unstable, iojs, system
custom aliases you define with nvm alias foo
-- nvm 帮助信息中对 版本号的描述

示例:

将当前版本写入

$ node -v > .nvmrc

使用 5.9 的版本

$ echo "5.9" > .nvmrc

使用最新的 LTS (Long-term Support) 版本

$ echo "lts/*" > .nvmrc

使用最新的 Node.js 版本

$ echo "node" > .nvmrc
在执行如下这些命令时,会自动读取 .nvmrc 中版本号以应用上,

nvm use
nvm install
nvm exec
nvm run
nvm which
这样协作者将项目 clone 下来后直接 nvm use 就直接切换到相应版本,如果本地没有安装,nvm install 则会安装相应版本。

engines
根据 npm-package 文档的描述,可以在 package.json 中通过 engines 属性指定 Node.js 的版本。

{

"engines": { "node": ">=0.10.3 <0.12" }

}
甚至可以限定 npm 的版本:

{

"engines": { "npm": "~1.0.20" }

}
有趣的是,在执行 npm install 安装项目依赖时,这个设置并不生效,相反,非官方的 yarn 是有效(respect)的,它会检查这里的设置,如果当前环境与所需不匹配,直接报错,这是我们期望的结果:

yarn 执行安装前检查版本不对时抛错

yarn 执行安装前检查版本不对时抛错

所以推荐使用 yarn。

如果使用的 npm 怎么办呢。只能手动写脚本来做这个事情了。

$ npm i -D semver
$ touch checkver.js
实现我们检查版本的逻辑:

checkver.js

const semver = require("semver");
const { engines } = require("./package");

const version = engines.node;
if (!semver.satisfies(process.version, version)) {
console.error(Required node version ${version}, got: ${process.version}.);
process.exit(1);
}
添加 postinstall 命令到 package.json:

{
"scripts": {

"postinstall": "node ./checkver.js"

}
}
运行效果:

使用 postinstall 执行 Node.js 版本的检查

使用 postinstall 执行 Node.js 版本的检查

为什么使用 postinstall 呢,如果使用 preinstall 岂不是更好,这样在执行安装前就能检查。但这里我们依赖了 semver 这个 npm 包,所以需要让安装先执行。

相关资源
creationix/nvm
How to Lock down Your Project’s Node Version Using .Nvmrc Or engines.
npm-package.json
原文地址https://www.cnblogs.com/Wayou/p/restrict_node_version.html

相关文章
|
28天前
|
JavaScript 测试技术 API
跟随通义灵码一步步升级vue2(js)项目到vue3版本
Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有显著提升。本文介绍了如何利用通义灵码逐步将 Vue 2 项目升级到 Vue 3,包括备份项目、了解新特性、选择升级方式、升级依赖、迁移组件和全局 API、调整测试代码等步骤,并提供了注意事项和常见问题的解决方案。
|
29天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
1月前
|
JavaScript 前端开发 测试技术
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
28 1
|
1月前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
28 4
|
1月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
12天前
|
JavaScript Linux iOS开发
详解如何实现自由切换Node.js版本
不同的项目中需要使用不同版本的 Node.js,有时旧项目需要旧版本,而新项目则可能依赖最新的 Node.js 版本
|
2月前
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
本文讨论了在配置Vite项目时遇到的`vite.defineConfig is not defined`错误,这通常是由于缺少必要的导入语句导致的。文章还涉及了如何创建最新版本的Vite项目以及如何处理`configEnv is not defined`的问题。
111 3
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
|
1月前
|
JavaScript Linux 网络安全
VS Code远程调试Nodejs项目
VS Code远程调试Nodejs项目
|
1月前
|
存储 JavaScript 前端开发
Vue.js项目中全面解析定义全局变量的常用方法与技巧
Vue.js项目中全面解析定义全局变量的常用方法与技巧
41 0