Git 如何使用相同的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": {

我的应用程序有两个版本(分支):master和dev。它们托管在Heroku的不同域上

我将源存储在Bitbucket中,然后使用管道部署到Heroku。这是非常方便,但我有一个问题,我不能告诉BB建立不同的。在package.json中,有一行应该是不同的:

用于生产(主控):

"scripts": {
        "heroku-postbuild": "webpack --config webpack.prod.js"
    },
对于开发人员:

"scripts": {
        "heroku-postbuild": "webpack --config webpack.dev.js"
    },
因此,我希望在生产环境中编译、压缩JavaScript代码,并在开发环境中调试、未压缩JavaScript代码

我想不出如何解决这个问题

我尝试使用git.gittributesmerge=ours创建两个不同版本的package.json。但它有两个陷阱:

  • 我仍然有冲突,当我合并,我必须编辑这个文件的所有时间
  • 如果我在dev上安装了一些新的包,package.json将自动更新,但是prod有自己的版本,构建将失败,因为它没有更新的包列表
  • 这个问题的正确解决方案是什么

    找到解决方案

    谢谢@piotr.wittchen尽管我使用了另一种解决方案,但他还是催促我找到了它。 事实证明,我可以在package.json中使用环境变量

    因此,我刚刚更改了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"
        },