当部署到Modulus.io时(这可能也适用于其他PAAS),他们将从packages.json文件安装所需的包。作为安装过程的一部分,也可能会调用一些npm脚本。例如postinstall
。但是,这些脚本可能无法在生产中运行(或不应该运行)。是因为脚本仅在本地可用或对生产没有任何意义。
如何检测环境并执行或不执行某些npm脚本?我可以访问process.env
对象并适当地处理脚本还是有更好的方法?
答案 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
等