【问题标题】:Node/NPM: How to pass arguments with .sh file callNode/NPM:如何通过 .sh 文件调用传递参数
【发布时间】:2017-05-19 15:17:03
【问题描述】:

我正在使用package.json 的脚本块在yarn installyarn install --production 之后立即调用postinstall.sh 脚本。

postinstall.sh 包含一些私有的npm 包,所以我们希望仅在环境 为开发环境时下载这些包中的devDependencies,而当环境为 时我们希望忽略生产

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 传递参数?

【问题讨论】:

    标签: node.js npm development-environment npm-install production-environment


    【解决方案1】:

    在 package.json 中,您应该能够检查 NODE_ENV,然后仅在 bash 脚本不生产时才执行它:

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

    这应该可以工作,因为在生产环境中,您将使用npm install --production 安装模块,因此脚本不会运行。

    【讨论】:

    • 我试过这样。在我们的例子中,这不起作用,因为我们想在两个环境中运行 postinstall.sh。
    【解决方案2】:

    而且,这个问题的简单答案是"postinstall": "./postinstall.sh \"$NODE_ENV\""。所以,最终看起来像下面。

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

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多