Git 如何使用相同的package.json以不同的方式构建?
我的应用程序有两个版本(分支):master和dev。它们托管在Heroku的不同域上 我将源存储在Bitbucket中,然后使用管道部署到Heroku。这是非常方便,但我有一个问题,我不能告诉BB建立不同的。在package.json中,有一行应该是不同的: 用于生产(主控):Git 如何使用相同的package.json以不同的方式构建?,git,heroku,version-control,Git,Heroku,Version Control,我的应用程序有两个版本(分支):master和dev。它们托管在Heroku的不同域上 我将源存储在Bitbucket中,然后使用管道部署到Heroku。这是非常方便,但我有一个问题,我不能告诉BB建立不同的。在package.json中,有一行应该是不同的: 用于生产(主控): "scripts": { "heroku-postbuild": "webpack --config webpack.prod.js" }, 对于开发人员: "scripts": {
"scripts": {
"heroku-postbuild": "webpack --config webpack.prod.js"
},
对于开发人员:
"scripts": {
"heroku-postbuild": "webpack --config webpack.dev.js"
},
因此,我希望在生产环境中编译、压缩JavaScript代码,并在开发环境中调试、未压缩JavaScript代码
我想不出如何解决这个问题
我尝试使用git.gittributes和merge=ours创建两个不同版本的package.json。但它有两个陷阱:
"scripts": {
"heroku-postbuild": "webpack --config webpack.$env.js"
},
env变量在Heroku开发应用程序中是“dev”,在prod中是“prod”,它的工作方式就像charm一样,不需要同一个文件有不同的版本。我使用了
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
中时会出现问题,因为它会覆盖脚本。在这种情况下,你需要做吉特樱桃采摘
另一种方法(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"
}
并根据情况调用适当的目标。这样,合并就不会有问题了。我不知道这在您的项目设置中是否可行。我必须更改package.json中的行,并将env变量放在那里,这对于不同的应用程序(“dev”和“prod”)是不同的:
我不是JavaScript项目方面的专家,但是否可以将此设置导出到单独的文件中,然后导入到
package.json
?如果是,则可以使用此postbuild
命令为生产/dev环境创建单独的文件,但为其余配置创建一个文件。这将是最合理的选择。@piotr.witchen我考虑过这个选项,但我不知道如何实现它。也许,我应该为它创建一个单独的问题…这也是一个很好的方法!
"scripts": {
"heroku-postbuild": "webpack --config webpack.$env.js"
},