如何在package.json中指定所需的Node.js版本?

时间:2015-03-30 15:06:17

标签: node.js npm package version

我有一个Node.js项目需要Node 12或更高版本。有没有办法在packages.json文件中指定它,以便安装程序会自动检查并告知用户是否需要升级?

6 个答案:

答案 0 :(得分:164)

我认为你可以使用“引擎”字段:

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

正如您所说,您的代码绝对不适用于任何较低版本,您可能也需要“engineStrict”标志:

{ "engineStrict" : true }

可以找到package.json文件的文档on the npmjs site

<强>更新

engineStrict现已弃用,因此这只会发出警告。现在,用户可以根据需要运行npm config set engine-strict true

答案 1 :(得分:60)

添加

package.json

  "engines": {
    "node": ">=10.0.0",
    "npm": ">=6.0.0"
  },

到文件.npmrc(靠近package.json,同一目录)

engine-strict=true

答案 2 :(得分:36)

就像Ibam所说,remove()现已弃用。但是我找到了这个解决方案:

检查-version.js:

engineStrict

<强>的package.json:

import semver from 'semver';
import { engines } from './package';

const version = engines.node;
if (!semver.satisfies(process.version, version)) {
  console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
  process.exit(1);
}

在此处了解更多信息: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

<强> .nvmrc

还有一件事。 一个dotfile&#39; .nvmrc&#39;可用于要求特定节点版本 - https://github.com/creationix/nvm#nvmrc

但是,它只受到npm脚本(和纱线脚本)的尊重。

答案 3 :(得分:1)

.nvmrc

如果您本来应该是using NVM like this,则可以在git跟踪的.nvmrc文件中指示给定项目所需的nodejs版本:

echo v10.15.1 > .nvmrc

这在cd上不会自动生效,这是明智的:用户必须执行以下操作:

nvm use

,现在该节点版本将用于当前shell。

您可以列出拥有的节点的版本:

nvm list

.nvmrc记录在:https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc

经过NVM 0.33.11测试。

答案 4 :(得分:0)

还有另一种更简单的方法:

  1. npm install Node@8(将节点8保存为package.json中的依赖项)
  2. 您的应用将使用节点8运行任何人 - 甚至是Yarn用户!
  3. 这是有效的,因为node只是一个将节点作为其包二进制发送的包。它只包含node_module / .bin,这意味着它只使节点可用于打包脚本。不是主壳。

    请参阅Twitter上的讨论:https://twitter.com/housecor/status/962347301456015360

答案 5 :(得分:0)

一个Mocha测试用例示例:

describe('Check version of node', function () {
    it('Should test version assert', async function () {

            var version = process.version;
            var check = parseFloat(version.substr(1,version.length)) > 12.0;
            console.log("version: "+version);
            console.log("check: " +check);         
            assert.equal(check, true);
    });});