如何在部署到PAAS / Modulus时忽略npm脚本

时间:2016-07-24 09:07:41

标签: node.js npm paas package.json modulus.io

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

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

1 个答案:

答案 0 :(得分:3)

很遗憾,您只能在特定环境的package.json定义脚本中使用。

我们假设您在postinstall中声明了这样的package.json脚本:

{
  "scripts": { 
    "postinstall": "node postInstall.js" 
  },
}

" easy" 方式是在此postInstall.js脚本中添加有关环境的逻辑:

if (process.env.NODE_ENV === 'production') {
  // Do not run in production
  process.exit(1);
}

如果您在production环境中运行,您只需指示Node.js使用指定的退出代码尽快终止该过程。

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

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

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

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

中的其他条件