web-dev-qa-db-ja.com

package.jsonで必要なNode.jsのバージョンを指定する方法を教えてください。

Nodeバージョン12以降を必要とするNode.jsプロジェクトがあります。 packages.jsonファイルでこれを指定する方法はありますか?そうすれば、インストーラーは自動的にユーザーをチェックしてアップグレードが必要かどうかをユーザーに通知しますか?

148

私はあなたが "エンジン"フィールドを使うことができると思います:

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

あなたのコードはそれ以降のバージョンでは絶対に動作しないと言っているので、おそらく "engineStrict"フラグも欲しいでしょう:

{ "engineStrict" : true }

Package.jsonファイルのドキュメントは npmjsサイトで にあります。

更新

engineStrictは現在推奨されていないので、これは警告を出すだけです。彼らがこれを望んでいるのであればnpm config set engine-strict trueを実行するのはユーザー次第です。

169
IBam

追加する

package.json

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

ファイル.npmrcへ(package.jsonの近く、同じディレクトリ)

engine-strict=true
64
Mikel

Ibamが言ったように、engineStrictは現在非推奨です。しかし、私はこの解決策を見つけました:

check-version.js:

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);
}

package.json:

{
  "name": "my package",
  "engines": {
    "node": ">=50.9" // intentionally so big version number
  },
  "scripts": {
    "requirements-check": "babel-node check-version.js",
    "postinstall": "npm run requirements-check"
  }
}

詳細はこちら: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

。nvmrc

後もう一つ。ドットファイル '.nvmrc'は特定のノードバージョンを要求するために使用することができます - https://github.com/creationix/nvm#nvmrc

しかし、それはnpmスクリプト(そして糸スクリプト)によってのみ尊重されます。

36
Adam

.nvmrc

あなたが このようにNVMを使って であれば、git-tracked .nvmrcファイルで与えられたプロジェクトに必要なnodejsのバージョンを示すことができます。

echo v10.15.1 > .nvmrc

これはcdでは自動的には有効になりません。

nvm use

そして現在、そのバージョンのノードが現在のシェルに使用されます。

あなたが持っているnodeのバージョンをリストすることができます。

nvm list

.nvmrcは次の場所に文書化されています。 https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc

NVM 0.33.11でテスト済み。

モカのテストケースの例:

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);
    });});

これを行うには、もう1つの簡単な方法があります。

  1. npm install Node@8(Node 8をpackage.jsonの依存関係として保存します)
  2. あなたのアプリはだれでもだれでもノード8を使用して実行されます。

nodeは単なるパッケージバイナリとしてnodeを出荷するパッケージなので、これはうまくいきます。これはnode_module/.binとして含まれているだけで、ノードをパッケージスクリプトで利用できるようにするだけです。メインシェルではありません。

ここTwitterでの議論を参照してください。 https://Twitter.com/housecor/status/96234730145601536

0
vnglst