有条件地运行npm脚本

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

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

它运行一个make文件,负责使代码丑化和其他一些小事情。

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

谢谢!

你可以在你的package.json定义类似的东西(我相信这是if语句的一个更好的缩写)。

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

然后当你用生产标志执行npm ,就像你说过的那样

 npm install --production 

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


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

 NODE_ENV=dev npm run build 

package.json ,你将启动一个脚本/程序

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

这将检查环境variables的值,以确定要做什么。 在runner.js我做了如下的事情

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

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

我会鼓励你对丑化你的代码采取不同的方式。 看看connect-browserify或更强大的资产架 。

这些function可以在启动Express服务器时自动隐藏您的代码,而不是在安装时。 你可以configuration它们在开发和生产中做不同的事情。