2016-07-24 4 views
1

Modulus.ioに展開すると(他のPAASにも当てはまるかもしれません)、packages.jsonファイルから必要なパッケージをインストールします。インストールプロセスの一環として、いくつかのnpmスクリプトも呼び出される可能性があります。例えば、postinstall。ただし、これらのスクリプトは本番環境で実行できない(または実行しない)ことがあります。ローカルでしか利用できないスクリプトや、プロダクションで意味をなさないスクリプトが原因です。PAAS/Modulusへの展開時にnpmスクリプトを無視する方法

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

答えて

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に指定されたexit coを使用してできるだけ早くプロセスを終了するように指示するだけです例えば、

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

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

、ノード環境がproductionでない場合、あなたは:

別のアプローチは、必ずUnixシステム上で実行している場合は、Bash conditionを使用して直接Node.jsの環境をチェックすることですpostInstall.jsスクリプトを再実行してください。 developmentなどの他の条件に調整することができます。

+0

「$ NODE_ENV」のヒントをありがとう。終了状態 '1'を返すように少し変更しなければならなかったので、展開時にさらなる実行が中止されました。これは、 "postinstall"のように条件を否定するときに機能します: "[\" $ NODE_ENV \ "= production] || someCmd" '。 – str

関連する問題