在webpack build中包含git commit hash和date

Mat*_*att 28 ecmascript-6 reactjs webpack angular

我正在使用react/es6/webpack.我想在我的应用程序中的某处显示构建和git哈希的日期.什么是最好的方法?

azi*_*ium 52

你可以使用webpack的__COMMIT_HASH__ https://webpack.github.io/docs/list-of-plugins.html#defineplugin

// get git info from command line
let commitHash = require('child_process')
  .execSync('git rev-parse --short HEAD')
  .toString();

...
plugins: [
    new webpack.DefinePlugin({
      __COMMIT_HASH__: JSON.stringify(commitHash),
    })
  ]
...
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的应用程序中使用它 __COMMIT_HASH__

  • 为了让 ESLint 开心,我必须将 `globals: { __COMMIT_HASH__: true }` 添加到我的 `.eslintrc` (/sf/answers/2733750771/) (5认同)
  • 我在 `commitHash` 的方法链的末尾放了一个 `.trim()` 来删除一个换行符。 (5认同)
  • @echo 因为这些值在构建时直接插入到代码中,并且 JSON.stringify 将这些值包装在引号中,生成字符串语法。如果我错了,希望有人能纠正我。 (2认同)
  • 在使用 `__COMMIT_HASH__` 之前我必须重新启动 webpack 开发服务器 (2认同)

Viv*_*shi 19

另一种方法是:

只需安装此软件包git-revision-webpack-plugin即可

简单的webpack插件,在构建期间基于本地git存储库生成VERSION和COMMITHASH文件.


示例代码:

在您的webpack.config.js(或任何dev - prod文件)中

const GitRevisionPlugin = require('git-revision-webpack-plugin');
const gitRevisionPlugin = new GitRevisionPlugin();

plugins: [
    new DefinePlugin({
      'VERSION': JSON.stringify(gitRevisionPlugin.version()),
      'COMMITHASH': JSON.stringify(gitRevisionPlugin.commithash()),
      'BRANCH': JSON.stringify(gitRevisionPlugin.branch()),
    }),
  ]
Run Code Online (Sandbox Code Playgroud)

在您的组件(React)中:

export class Home extends Component{
    ....

    render() {
        return(
            <div>
                {VERSION} 
                {COMMITHASH}
                {BRANCH}
            </div>
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的模板(Angular)中:

{{ VERSION }} 
{{ COMMITHASH }}
{{ BRANCH }}
Run Code Online (Sandbox Code Playgroud)

  • 如果 webpack 处于监视模式并保持运行,当进行新的 git commit/pull 时如何更新此类 git 信息? (2认同)
  • “watch”模式适用于项目中的源文件,而不是 git 存储库。我猜测“watch-poll”是与源文件无关的更改的唯一有效选项。 (2认同)

小智 5

我无法对置顶帖子发表评论,所以这里是:

Webpack.dev.js

import gitprocess from "child_process"
let LoadCommitDate = gitprocess
  .execSync('git log -1 --date=format:"%Y/%m/%d %T" --format="%ad"')
  .toString()
...
plugins: [
    new webpack.DefinePlugin({
       COMMITDATE: JSON.stringify(LoadCommitDate),
    })
  ]
Run Code Online (Sandbox Code Playgroud)

另外在.eslintrc中

  "globals": {
    "COMMITDATE": "readonly",
  },
Run Code Online (Sandbox Code Playgroud)

结果 - 您可以在代码中引用的最新提交日期!

console.log(COMMITDATE)
2020/05/04 21:02:03
Run Code Online (Sandbox Code Playgroud)