天天看點

限定項目的 Node.js 版本将目前版本寫入使用 5.9 的版本使用最新的 LTS (Long-term Support) 版本使用最新的 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。

如果使用的 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

繼續閱讀