Node/NPM: 如何使用 .sh 文件调用传递参数
Node/NPM: How to pass arguments with .sh file call
我正在使用 package.json
的脚本块在 yarn install
和 yarn install --production
之后立即调用 postinstall.sh
脚本。
postinstall.sh
包含一些私有 npm
包,所以我们只想在 environment 是开发时下载这些包的 devDependencies
当环境是 production.
时我们想忽略
package.json
"private": true,
"scripts": {
"postinstall": "./postinstall.sh"
}
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
上述脚本的问题是我们不希望任何用户交互,那么我如何根据环境从package.json
传递参数?
在 package.json 中,您应该能够检查 NODE_ENV
,然后仅在非生产时执行您的 bash 脚本:
"private": true,
"scripts": {
"postinstall": "[ \"$NODE_ENV\" != production ] && ./postinstall.sh"
}
这应该可行,因为在生产环境中,您将使用 npm install --production
安装模块,因此脚本不会 运行。
而且,对此的简单回答是 "postinstall": "./postinstall.sh \"$NODE_ENV\""
。所以,最终看起来像下面这样。
"private": true,
"scripts": {
"postinstall": "./postinstall.sh \"$NODE_ENV\""
}
我正在使用 package.json
的脚本块在 yarn install
和 yarn install --production
之后立即调用 postinstall.sh
脚本。
postinstall.sh
包含一些私有 npm
包,所以我们只想在 environment 是开发时下载这些包的 devDependencies
当环境是 production.
package.json
"private": true,
"scripts": {
"postinstall": "./postinstall.sh"
}
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
上述脚本的问题是我们不希望任何用户交互,那么我如何根据环境从package.json
传递参数?
在 package.json 中,您应该能够检查 NODE_ENV
,然后仅在非生产时执行您的 bash 脚本:
"private": true,
"scripts": {
"postinstall": "[ \"$NODE_ENV\" != production ] && ./postinstall.sh"
}
这应该可行,因为在生产环境中,您将使用 npm install --production
安装模块,因此脚本不会 运行。
而且,对此的简单回答是 "postinstall": "./postinstall.sh \"$NODE_ENV\""
。所以,最终看起来像下面这样。
"private": true,
"scripts": {
"postinstall": "./postinstall.sh \"$NODE_ENV\""
}