Node/NPM: 如何使用 .sh 文件调用传递参数

Node/NPM: How to pass arguments with .sh file call

我正在使用 package.json 的脚本块在 yarn installyarn 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\""
}