我有2个主要的构建配置 - dev和prod。 我将更新推送到运行npm install --production的heroku服务器以安装我的应用程序。 在package.json中,我有以下部分:
"scripts": {
"postinstall": "make install"
}
运行一个make文件,负责解释代码和其他一些小问题。
但是,我不需要在开发模式下运行此makefile。有没有办法用npm有条件地运行脚本?..
谢谢!
答案 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服务器时自动验证您的代码,而不是在安装时。您可以将它们配置为在开发和生产中执行不同的操作。