0

package.jsonのスクリプトブロックを使用して、postinstall.shスクリプトをyarn installyarn install --productionの直後に呼び出しています。ノード/ NPM:.shファイル呼び出しで引数を渡す方法

postinstall.shは、いくつかのプライベートnpmパッケージが含まれているので、私たちは環境が開発され、我々は環境が生産ときに無視したい場合にのみ、それらのパッケージのdevDependenciesをダウンロードしたいです。

package.json

"private": true, 
    "scripts": { 
    "postinstall": "./postinstall.sh" 
    } 

上記のスクリプトでの問題は、我々はすべてのユーザーとの対話をしたくないので、私はどのように渡すことができ

# Get the input from user to check server is Production or not 
echo 
echo "INFO: We are not downloading Development dependencies of following services in Production environment: 
echo "WARN: please enter 'yes' or 'no' only." 

while [[ "$PRODUCTION_ENV" != "yes" && "$PRODUCTION_ENV" != "no" ]] 
do 
    read -p "Is this Production environment?(yes/no): " PRODUCTION_ENV 
done 

if [[ "$PRODUCTION_ENV" == "yes" ]]; then 
    ENV='--only=production' 
fi 

npm install $ENV --ignore-scripts pkg-name 

postinstall.sh環境によってはpackage.jsonからの議論? package.jsonで

答えて

0

そして、これに対する簡単な答えは"postinstall": "./postinstall.sh \"$NODE_ENV\""です。だから、最終的には以下のように見える。

"private": true, 
"scripts": { 
    "postinstall": "./postinstall.sh \"$NODE_ENV\"" 
} 
0

あなたがNODE_ENVをチェックすることができ、それが生産ではありませんときにのみ、あなたのbashスクリプトを実行する必要があります。これは、あなたがそうnpm install --productionを使ってモジュールをインストールします本番環境にあるため動作するはず

"private": true, 
    "scripts": { 
    "postinstall": "[ \"$NODE_ENV\" != production ] && ./postinstall.sh" 
    } 

スクリプトは実行されません。

+0

このようにしてみました。私たちの場合、両方の環境でpostinstall.shを実行したいので動作しません。 –

関連する問題