Scriptsキーに次の(簡略化された)コンテンツを含むpackage.jsonがあります。
...
scripts: {
"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js",
"poststart": "echo $NODE_ENV"
}
...
コマンドラインから実行できます:
npm start
これにより、start-app.jsスクリプトが実行され、process.env.NODE_ENV環境変数が「production」に設定されます。構文の説明については、 here をご覧ください。
here のように、ポストスタートは開始後に自動的に実行されます。
ただし、ポストスタートはNODE_ENVシェル環境変数を「継承」しないため、echoコマンドは何もエコーしません。
私の制作コードはもう少し複雑ですが、私が達成しようとしているのは、NODE_ENV変数を「開始点」から依存スクリプトに渡すことです。その方法に関する提案/ベストプラクティスはありますか?
私はやりたいかもしれないので、ポストスタートでNODE_ENVをハードコードしたくありません:
NODE_ENV=development npm start
そして、すべての「連鎖」が同じ環境を継承することを望みます。
いくつかのオプションがあります:
env
を個別に定義できますpoststart
スクリプトの代わりに、npmのコマンドを次のように連結できます:"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
NODE_ENV
などの設定で環境固有のjsonファイルを定義できます。私たちの会社では、pm2を使用して、すべてのアプリを異なる環境で正常に実行しています(その間、同じ開始コマンドを使用しています)。これは私がやった方法です、最初に2つの開発依存関係をインストールする必要があります
https://www.npmjs.com/package/env-cmd これはファイルからenv varをロードします
https://www.npmjs.com/package/cross-env スクリプトで環境変数を使用
サンプルスクリプト:
"env-cmd ./.config/prod.env cross-env-Shell \"docker volume create $DOCKER_VOLUME\""
これはprod.envから$ DOCKER_VOLUME env varをロードします