0

当部署到Modulus.io(这可能也适用于其他 PAAS)时,他们将从 packages.json 文件安装所需的包。作为安装过程的一部分,也可能会调用一些 npm 脚本。例如postinstall. 但是,这些脚本可能无法在生产环境中运行(或不应运行)。可能是因为脚本仅在本地可用,或者在生产中没有任何意义。

如何检测环境并执行或不执行某些 npm 脚本?我可以访问process.env对象并适当地处理脚本还是有更好的方法?

4

1 回答 1

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 使用指定的退出代码尽快终止进程。

如果您在postinstall挂钩中运行多个脚本,您也可以将所有脚本执行移动到具有相同机制的包装器中以在特定环境中退出,如果不是,则执行所有其他脚本。

如果您总是在 Unix 系统上运行,另一种方法是使用Bash 条件直接检查 Node.js 环境:

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

在这种情况下,如果节点环境不是production,那么您正在运行您的postInstall.js脚本。您可以将其调整为其他条件,例如仅 indevelopment等。

于 2016-07-27T09:59:41.490 回答