我有两个主要的构建配置- dev和prod。我将更新推送到运行npm install --production的heroku服务器来安装我的应用程序。在package.json中,我有以下代码段:
"scripts": { "postinstall": "make install" }
它运行一个make文件,该文件负责修改代码和其他一些次要的事情。但是,我不需要在开发模式下运行这个makefile。谢谢你!
m1m5dgzv1#
您可以在package.json中定义类似的内容(我相信if语句有更好的简写)。
package.json
if
"scripts": { "postinstall":"if test \"$NODE_ENV\" = \"production\" ; then make install ; fi " }
然后,当您执行带有生产标志的npm时,就像您所说的那样,您已经这样做了
npm
npm install --production
它将执行您make install,因为它将设置$NODE_ENV = production当我需要有条件地执行一些任务时,我将环境变量传递给脚本/程序,由它来处理逻辑。
make install
$NODE_ENV = production
NODE_ENV=dev npm run build
在package.json中,您将启动一个脚本/程序
"scripts": { "build":"node runner.js" }
它将检查环境变量的值以确定要执行的操作。
if (process.env.NODE_ENV){ switch(process.env.NODE_ENV){ .... } }
dphi5xsq2#
对于条件npm脚本,您可以使用跨平台的基本逻辑运算符来创建类似if的语句(||和&&)。我遇到过需要在任何机器上只运行一次脚本来生成helper的情况。您可以使用内联javascript通过process.exit()代码来实现这一点。
||
&&
process.exit()
"scripts": { "build":"(node -e \"if (! require('fs').existsSync('./bin/helpers')){process.exit(1)} \" || npm run setup-helpers) && npm run final-build-step" }
因此,要测试env s,您可以执行以下操作:
env
"scripts": { "build":"node -e \"if (process.env.NODE_ENV === 'production'){process.exit(1)} \" || make install" }
balp4ylt3#
你不能在devDependencies下添加另一个.json部分吗?那么如果你执行npm install,它会安装devDependencies下指定的包,而npm install --production会安装常规的依赖项。
yduiuuwa4#
我鼓励你采取不同的策略来美化你的代码。看看connect-browserify或者更强大的asset-rack。它们可以在Express服务器启动时(而不是安装时)自动修改代码,并且您可以配置它们在开发和生产中做不同的事情。
4条答案
按热度按时间m1m5dgzv1#
您可以在
package.json
中定义类似的内容(我相信if
语句有更好的简写)。然后,当您执行带有生产标志的
npm
时,就像您所说的那样,您已经这样做了它将执行您
make install
,因为它将设置$NODE_ENV = production
当我需要有条件地执行一些任务时,我将环境变量传递给脚本/程序,由它来处理逻辑。
在
package.json
中,您将启动一个脚本/程序它将检查环境变量的值以确定要执行的操作。
dphi5xsq2#
对于条件npm脚本,您可以使用跨平台的基本逻辑运算符来创建类似if的语句(
||
和&&
)。我遇到过需要在任何机器上只运行一次脚本来生成helper的情况。您可以使用内联javascript通过process.exit()
代码来实现这一点。因此,要测试
env
s,您可以执行以下操作:balp4ylt3#
你不能在devDependencies下添加另一个.json部分吗?那么如果你执行npm install,它会安装devDependencies下指定的包,而npm install --production会安装常规的依赖项。
yduiuuwa4#
我鼓励你采取不同的策略来美化你的代码。看看connect-browserify或者更强大的asset-rack。
它们可以在Express服务器启动时(而不是安装时)自动修改代码,并且您可以配置它们在开发和生产中做不同的事情。