Nodeバージョン12以降を必要とするNode.jsプロジェクトがあります。これをpackages.jsonファイルで指定して、アップグレードが必要かどうかをインストーラが自動的に確認してユーザーに通知する方法はありますか?
Nodeバージョン12以降を必要とするNode.jsプロジェクトがあります。これをpackages.jsonファイルで指定して、アップグレードが必要かどうかをインストーラが自動的に確認してユーザーに通知する方法はありますか?
回答:
「engines」フィールドを使用できると思います。
{ "engines" : { "node" : ">=0.12" } }
あなたのコードはそれより低いバージョンでは絶対に機能しないと言っているので、おそらく "engineStrict"フラグも必要です:
{ "engineStrict" : true }
package.jsonファイルのドキュメントはnpmjsサイトにあります
更新
engineStrict
は非推奨となったため、警告のみが表示されます。これがnpm config set engine-strict true
必要な場合、実行するのはユーザーの責任です。
アップデート2
以下で指摘するように、ノードのバージョンに互換性がない場合、.npmrc
プロジェクトのルートにファイル(package.jsonファイルと同じレベル)をテキストで作成engine-strict=true
すると、インストール中にエラーが発生します。
engineStrict
は 、数か月非推奨になり、使用時に警告が生成されました。npm @ 3以降、フィールドは無視され、エンジン違反は警告のみを生成します。ユーザーとして、厳密なエンジンフィールドの適用が必要な場合は、npm config set engine-strict trueを実行してください "
cd .. && npm i <folder-name>
プロジェクト自体を確認するために忘れないでください。ただし、これにより、ビルド全体がトリガーされます。
engine-strict=true
.npmrcに追加しても同じ効果があります
追加
に package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
ファイルに.npmrc
(package.json
同じディレクトリに近い)
engine-strict=true
npm install
です。yarn
同様に動作します
package.json
は、上記(11.13.0
および6.7.0
)と同様の「engines」セクションと、上記で.npmrc
指定されたコンテンツのみを持つa をセットアップしました。nvmで古いノードバージョンに切り替えてから実行npm install
しましたが、依存関係がインストールされるだけで、エンジンバージョンの不一致についても言及されていません。
イバム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
後もう一つ。dotfile '.nvmrc'は、特定のノードバージョンを要求するために使用できます-https ://github.com/creationix/nvm#nvmrc
しかし、それはnpmスクリプト(および糸スクリプト)によってのみ尊重されます。
.nvmrc
このようにNVMを使用している場合は(おそらくそうする必要がある)、git追跡.nvmrc
ファイルで特定のプロジェクトに必要なnodejsバージョンを指定できます。
echo v10.15.1 > .nvmrc
これはで自動的に有効になりませんcd
。これはまともなことです。ユーザーは次のことを行う必要があります。
nvm use
そして、そのバージョンのノードが現在のシェルに使用されます。
あなたが持っているノードのバージョンをリストすることができます:
nvm list
.nvmrc
https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrcに文書化されています
そのノードのバージョンを自動的に選択する方法cd
は質問されました:プロジェクトに基づいてノードの正しいバージョンに自動的に切り替える
NVM 0.33.11でテスト済み。
これを行う別の簡単な方法があります。
npm install Node@8
(Node 8をpackage.jsonの依存関係として保存します)これnode
は、nodeをパッケージバイナリとして出荷するだけのパッケージであるため機能します。これは、node_module / .binとして含まれているだけです。つまり、パッケージスクリプトでノードを使用できるようにするだけです。メインシェルではありません。
こちらのTwitterでの議論を参照してください:https : //twitter.com/housecor/status/962347301456015360
./node node-sass
なく、.bin で実行する必要がありますnode-sass
。すべての.binファイルで同じかどうかはわかりません。
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);
});});