我的应用有2个版本(分支):主版本和开发版本。它们托管在Heroku的不同域上。
我将源存储在Bitbucket中,然后使用管道将其部署到Heroku。这很方便,但是我有一个问题,我不能告诉BB进行不同的构建。在package.json中,有一行应该不同:
生产版(主版):
"scripts": {
"heroku-postbuild": "webpack --config webpack.prod.js"
},
对于开发人员:
"scripts": {
"heroku-postbuild": "webpack --config webpack.dev.js"
},
因此,我希望在生产环境中编译,压缩JavaScript代码,并在开发环境中可调试,未压缩状态。
我不知道如何解决这个问题。
我尝试使用git .gitattributes 和 merge = ours 使用2个不同版本的package.json。但是它有两个陷阱:
该问题的正确解决方案是什么?
找到解决方案!
感谢@ piotr.wittchen,即使我使用其他解决方案,他还是强迫我找到它。 原来我可以在package.json https://devcenter.heroku.com/articles/node-best-practices#hook-things-up
中使用环境变量所以,我只是更改了package.json中的行:
"scripts": {
"heroku-postbuild": "webpack --config webpack.$env.js"
},
Heroku开发应用程序中的env变量是“ dev”,而在prod中的变量是“ prod”,它的工作原理就像是魅力,不需要相同文件的不同版本。
答案 0 :(得分:2)
我和npm
一起玩了一段时间,这是我对这个问题的解决方案的建议:
创建一个名为heroku-post-build.sh
的bash脚本。
对于master
分支,其内容应为:
#!/usr/bin/env bash
webpack --config webpack.prod.js
以及dev
分支:
#!/usr/bin/env bash
webpack --config webpack.dev.js
在heroku-postbuild
目标内部调用bash脚本,如下所示:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"heroku-postbuild": "./heroku-post-build.sh"
},
"keywords": [],
"author": "",
"license": "ISC"
}
当您要将dev
合并到master
中时,将出现问题,因为它将覆盖脚本。在这种情况下,您需要进行git cherry采摘。
另一种方法(IMO更好)是创建两个这样的目标:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"heroku-postbuild-dev": "webpack --config webpack.dev.js"
"heroku-postbuild-prod": "webpack --config webpack.prod.js"
},
"keywords": [],
"author": "",
"license": "ISC"
}
并根据情况调用适当的目标。这样,合并就不会有问题。我不知道在您的项目设置中是否可行。
答案 1 :(得分:0)
我必须在package.json中更改行,并在其中放置 env 变量,这对于不同的应用程序(“ dev”和“ prod”)而言是不同的:
"scripts": {
"heroku-postbuild": "webpack --config webpack.$env.js"
},