0

Modulus.ioにデプロイする場合(これはおそらく他の PAAS にも当てはまります)、packages.json ファイルから必要なパッケージをインストールします。インストール プロセスの一部として、いくつかの npm スクリプトも呼び出される場合があります。たとえばpostinstall。ただし、これらのスクリプトは本番環境では実行できない (または実行すべきではない) 場合があります。ローカルでしか利用できないスクリプトや、本番環境では意味をなさないスクリプトが原因である可能性があります。

環境を検出し、特定の npm スクリプトを実行または実行しないようにするにはどうすればよいですか? オブジェクトにアクセスしprocess.envてスクリプトを適切に処理できますか、それとももっと良い方法がありますか?

4

1 に答える 1

3

package.json残念ながら、特定の環境に対してのみスクリプトを定義することはできません。

postinstallで次のように宣言されたスクリプトがあるとしpackage.jsonます。

{
  "scripts": { 
    "postinstall": "node postInstall.js" 
  },
}

簡単な」postInstall.js方法は、このスクリプトに環境に関するロジックを追加することです。

if (process.env.NODE_ENV === 'production') {
  // Do not run in production
  process.exit(1);
}

環境で実行している場合はproduction、たとえば指定された終了コードを使用して、できるだけ早くプロセスを終了するように Node.js に指示するだけです。

フックで複数のスクリプトをpostinstall実行している場合は、同じメカニズムを持つラッパーですべてのスクリプトの実行を移動して、特定の環境で終了することもできます。そうでない場合は、他のすべてのスクリプトを実行します。

常に Unix システムで実行している場合の別のアプローチは、Bash 条件を使用して Node.js 環境を直接確認することです。

{
  "scripts": { 
    "postinstall": "[ \"$NODE_ENV\" != production ] && node postInstall.js"
  },
}

この場合、ノード環境が でない場合は、スクリプトproductionを実行しています。のみなど、postInstall.js他の条件に合わせて調整できます。development

于 2016-07-27T09:59:41.490 に答える