有条件地运行npm脚本

时间:2013-09-12 14:13:53

标签: node.js heroku npm

我有2个主要的构建配置 - dev和prod。 我将更新推送到运行npm install --production的heroku服务器以安装我的应用程序。 在package.json中,我有以下部分:

"scripts": {
    "postinstall": "make install"
}

运行一个make文件,负责解释代码和其他一些小问题。

但是,我不需要在开发模式下运行此makefile。有没有办法用npm有条件地运行脚本?..

谢谢!

3 个答案:

答案 0 :(得分:25)

您可以在package.json中定义类似的内容(我确信这是if语句的更好的简写。)

"scripts": {
    "postinstall":"if test \"$NODE_ENV\" = \"production\" ; then make install ; fi "
}

然后当您执行npm生产标记时,就像您所说的那样已经

npm install --production

它会执行您的make install,因为它会设置$NODE_ENV = production

当我需要有条件地执行某些任务时,我将环境变量传递给脚本/程序,并负责处理该逻辑。我像这样执行我的脚本

NODE_ENV=dev npm run build

并在package.json中,您将启动一个脚本/程序

"scripts": {
    "build":"node runner.js"
}

将检查环境变量的值以确定要执行的操作。在runner.js我做了类似下面的内容

if (process.env.NODE_ENV){
  switch(process.env.NODE_ENV){
    ....
  }
}

答案 1 :(得分:1)

你不能在devDependencies下的.json中添加另一个部分吗?然后,如果您执行npm install,它将安装devDependincies和npm install指定的软件包--production将安装常规的依赖项。

答案 2 :(得分:1)

我鼓励你采用不同的方法来解决你的代码问题。请查看connect-browserify或更强大的asset-rack

这些可以在启动Express服务器时自动验证您的代码,而不是在安装时。您可以将它们配置为在开发和生产中执行不同的操作。