heroku 有条件地运行npm脚本

wmtdaxz3  于 2022-12-13  发布在  其他
关注(0)|答案(4)|浏览(145)

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

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

它运行一个make文件,该文件负责修改代码和其他一些次要的事情。
但是,我不需要在开发模式下运行这个makefile。
谢谢你!

m1m5dgzv

m1m5dgzv1#

您可以在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"
}

它将检查环境变量的值以确定要执行的操作。

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

dphi5xsq2#

对于条件npm脚本,您可以使用跨平台的基本逻辑运算符来创建类似if的语句(||&&)。我遇到过需要在任何机器上只运行一次脚本来生成helper的情况。您可以使用内联javascript通过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,您可以执行以下操作:

"scripts": {
    "build":"node -e \"if (process.env.NODE_ENV === 'production'){process.exit(1)} \" || make install"
}
balp4ylt

balp4ylt3#

你不能在devDependencies下添加另一个.json部分吗?那么如果你执行npm install,它会安装devDependencies下指定的包,而npm install --production会安装常规的依赖项。

yduiuuwa

yduiuuwa4#

我鼓励你采取不同的策略来美化你的代码。看看connect-browserify或者更强大的asset-rack
它们可以在Express服务器启动时(而不是安装时)自动修改代码,并且您可以配置它们在开发和生产中做不同的事情。

相关问题