Git 挂钩更新包 json 版本

Git hook update package json version

在我们的项目中,我们经常忘记更新 Package.json 文件中的版本号。我们的是一个 AngularJS 项目。在我们的包 JSON 文件中,我们指定了以下两个版本信息

"version": "1.0.7",
"devVersion": "1.0.4"

在合并分支开发之前我想要一个自动脚本来更新以上两个版本号。我在想 Git Hooks 会帮助我。

我在哪里可以找到挂钩,我可以在 .git 文件夹下的本地存储库中看到这些挂钩。我很困惑要使用哪个钩子。搜索 Google 表明我必须在服务器上创建挂钩。

我在哪里可以找到它们,我可以更新上面的两个密钥(版本和 devVersion)吗?

请建议使用的位置和挂钩,这将解决很多问题。

您有两种挂钩(都存在于任何 .git/hooks 文件夹中):服务器挂钩和客户端挂钩。
它们列在“Customizing Git - Git Hooks

合并是一个本地操作,所以如果你想在合并期间自动化任何进程,你需要一个客户端挂钩,比如 post-commit 挂钩(意思是在 创建合并提交)。
如果您需要在 合并之前 更新该文件,您可以尝试使用 pre-commit 挂钩,然后 (如果没有,您的 pre-commit 挂钩会什么都不做,因为您只想在合并之前更新版本)。

您可以在 this answer an example of a post-commit hook 中看到它生成了一个 version.json 文件。
如果是用 node 写的,但是你可以用任何你想要的脚本语言写一个钩子。

我正在使用 husky and git-branch-is:

"scripts": {
  ...
  "postmerge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
  ...
},

阅读更多关于 npm version

Webpack 或 Vue.js

如果您使用的是 webpack 或 Vue.js,您可以使用 Auto inject version - Webpack plugin

在 UI 中显示它

NUXT

nuxt.config.js中:

var WebpackAutoInject = require('webpack-auto-inject-version');

module.exports = {
  build: {
    plugins: [
      new WebpackAutoInject({
        // options
        // example:
        components: {
          InjectAsComment: false
        },
      }),
    ]
  },
}

在您的 template 内,例如在页脚中:

<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>

有了Husky,就非常简单了:

{
  "name": "demo-project",
  "version": "0.0.3",
  "husky": {
    "hooks": {
      "pre-commit": "npm --no-git-tag-version version patch && git add ."
    }
  }
}

注意:我把git add .放在最后,因为我们更新包版本后,我们需要暂存它