限定项目的 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

限定项目的 Node.js 版本相关推荐

  1. 详细记录基于vue+nodejs+mongodb构建的商城学习(四)基于项目的node.js开发后端的学习与梳理总结...

    前置: 本系列文章是一个本人边学习边梳理的学习笔记,俗话说好脑袋不如烂笔头,再好的记忆力时间长了也会有细节忘记,本项目选择的前端框架是vue,后端开发使用是node.js,数据库使用的是mongodb ...

  2. 以太坊测试链环境node.js版本

    为什么80%的码农都做不了架构师?>>>    MAC升级Nodejs和Npm到最新版 第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache ...

  3. 使用napi node_使用Napi / node-addon-api和Cmake的独立于Node.js版本的C ++ Native Addon

    使用napi node This is a tutorial for c++ Node-addon-api / Napi addon using cmake.Napi makes it indepen ...

  4. Eclipse修改web项目的jdk编译版本

    Eclipse修改web项目的jdk编译版本 有的时候因为项目需要的原因我们需要指定web项目的编译版本,下边是两种修改编译版本的方法 1.修改所有项目的默认jdk版本 点击Window->Pr ...

  5. 部署onlyoffice(node.js版本)之野蛮施工法

    OnlyOffice,在线的文档编辑工具,可以在浏览器上创建WORD,EXCEL,PPT,并且实现在线编辑功能. 第一步,使用docker安装OnlyOffice/DocumentServer. su ...

  6. VUE3学习笔记(二)VUE2 node.js 版本高

    今天在高版本node.js系统运行原来的vue2项目,出现如下错误: 网上查询说的node.js版本高导致,需要输入如下命令就可以解决! 在命令行输入: $env:NODE_OPTIONS=" ...

  7. 使用nvm管理node.js版本以及更换npm淘宝镜像源

    目录 1,前言 2,安装nvm 3,nvm的使用 4,错误处理 5,修改npm默认镜像源 6,win10下cnpm报错 1,前言 注意:此教程仅限Windows,Mac可能不适用 在我们的日常开发中可 ...

  8. 【使用 node 版本切换工具 nvm 切换 node.js 版本】

    使用 node 版本切换工具 nvm 切换 node.js 版本 文章目录 使用 node 版本切换工具 nvm 切换 node.js 版本 前言 一.nvm是什么? 二.使用步骤 1.卸载原有 no ...

  9. 查看Vue版本 node.js版本vue-cli版本

    查看node.js版本 node -v 查看vue版本 npm list vue 或者进入项目中package.json文件直接查看 查看Vue-cli版本 vue -V 或者 vue --versi ...

最新文章

  1. win10 远程登录 无密码用户
  2. 最有效的萨克斯弱音器_1990到2016年全球自杀数据公布,中国自杀死亡率下降最显著!...
  3. 分享一些看了就能用的面试技巧
  4. vue3代码的组织形式
  5. Java数据结构-约瑟夫问题(Joseph环)
  6. 网络安全实验室-解密关1
  7. 2022年北京航空航天大学计算机考研复试分数线
  8. 数据表对应关系(一对一、一对多、多对多)
  9. 关于对比型数据与分布型数据的图表可视化
  10. pytorch 中的 forward 的使用与解释
  11. 各种数据类型的取值范围(总结全)
  12. vlc web 登录账号_使用VLC Activex插件做网页版视频播放器
  13. Android Studio入学1-3:通过okhttp连接服务器
  14. android 六边形布局,Android自定义View——一个可定制的六边形阵列
  15. 中小学python编程教学-中小学青少年编程课程
  16. 渗透测试-中间件日志包含绕过和php文件读写包含
  17. 2020数学建模参加后感想
  18. 西西吹雪:从程序员到项目经理(一)
  19. 说说zookeeper一般都有哪些使用场景?
  20. win10笔记本电脑分享热点无法选择2.4ghz或5ghz的解决方法

热门文章

  1. Python函数之计算规则图形的面积
  2. elasticsearch的集中常见操作
  3. Android第四十一天(3)
  4. 没有了SA密码,无法Windows集成身份登录,DBA怎么办?
  5. http头部信息解析
  6. modules not found(模块未找到)的解决方案
  7. 在ROMMON状态下恢复IOS的方法
  8. NSProxy的理解和使用
  9. 73款阿里巴巴开源软件详解
  10. 【转】ActiveMQ消息传送机制以及ACK机制详解