git revision for vite plugin
npm install git-revision-vite-plugin> 🔥 该插件旨在使用vite脚手架时获取git仓库信息
- 目标 - 尽可能实现git-revision-webpack-plugin等同的功能,保持api与之对齐
- 鸣谢 - 该插件实现参考git-revision-webpack-plugin和vite-plugin-git-revision两个库,特别感谢两个作者
- 声明 - 该插件旨在减化自己工作中重复工作的工具,实现原理简单,自身能力有限,使用者勿喷,如果有好的想法和建议也可在issue中提出
Install:
``bash`
$ npm install -D git-revision-vite-plugin
Add to your vite.config.js:
`js
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';
export default {
plugins: [
Vue(),
GitRevisionVitePlugin()
],
};
`
Use in code:
`javascript`
):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
version: true
})
],
};
`$3
如果需要自定义version的注入变量名,需要配置此选项(默认为versionVar: GIT_VERSION):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
versionVar: 'GIT_VERSION'
})
],
};
`$3
如果需要自定义version的git指令,需要配置此选项(默认为versionCommand: describe --always):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
versionCommand: 'describe --always'
})
],
};
`$3
如果需要轻量级tag支持,需要打开此开关(默认为lightweightTags: false)。lightweightTags与version是互斥选项,lightweightTags打开时如果git仓库存在tag信息默认显示返回tag,如果git仓库不存在tag信息默认回退返回version信息。lightweightTags与versionCommand选项不能同时设置,否则会抛出错误:`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
lightweightTags: true
})
],
};
`$3
如果需要branch支持,需要打开此开关(默认为branch: true):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
branch: true
})
],
};
`$3
如果需要自定义branch的注入变量名,需要配置此选项(默认为branch: GIT_BRANCH):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
branchVar: 'GIT_BRANCH'
})
],
};
`$3
如果需要自定义branch的git指令,需要配置此选项(默认为branchCommand: rev-parse --abbrev-ref HEAD):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
branchCommand: 'rev-parse --abbrev-ref HEAD'
})
],
};
`$3
如果需要commitHash支持,需要打开此开关(默认为commitHash: true):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
commitHash: true
})
],
};
`$3
如果需要自定义commitHash的注入变量名,需要配置此选项(默认为commitHashVar: GIT_COMMITHASH):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
commitHashVar: 'GIT_COMMITHASH'
})
],
};
`$3
如果需要自定义commitHash的git指令,需要配置此选项(默认为commitHashCommand: rev-parse HEAD):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
commitHashCommand: 'rev-parse HEAD'
})
],
};
`$3
如果需要lastCommitDateTime支持,需要打开此开关(默认为lastCommitDateTime: true):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
lastCommitDateTime: true
})
],
};
`$3
如果需要自定义commitHash的注入变量名,需要配置此选项(默认为lastCommitDateTimeVar: GIT_LASTCOMMITDATETIME):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
lastCommitDateTimeVar: 'GIT_LASTCOMMITDATETIME'
})
],
};
`$3
如果需要自定义commitHash的git指令,需要配置此选项(默认为lastCommitDateTimeCommand: log -1 --format=%cI):`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
lastCommitDateTimeCommand: 'log -1 --format=%cI'
})
],
};
`$3
如果需要自定义gitWorkTree,需要配置此选项:`javascript
import Vue from '@vitejs/plugin-vue';
import GitRevisionVitePlugin from 'git-revision-vite-plugin';export default {
plugins: [
Vue(),
GitRevisionVitePlugin({
gitWorkTree: 'xxxx'
})
],
};
`$3
___
#### 为什么不将信息注入到import.meta.env上?
> a. git信息的注入是使用vite -> config -> define选项在编译时全局进行静态替换,但存在一个问题是不支持import.meta.env上的注入,目前发现是这样的(https://cn.vitejs.dev/config/#define)
> b. 要实现注入到import.meta.env现阶段的想法是使用vite提供的loadEnv接口,但是还未实际操作,后续版本可能改为此形式#### 注入的变量名为什么是GIT_打头?
> a. 原因是避免注入的全局变量名和其它模块冲突(实际开发中有遇到其它三方库使用了VERSION这个变量名导致在打包时被静态替换出现错误),当然如果你不满意可以通过全局选项修改。
#### 怎么解决全局注入变量名的提示报错?
`
// .eslintrc.json - 解决eslint校验报错
{
"globals": {
"GIT_BRANCH": true,
"GIT_VERSION": true,
"GIT_COMMITHASH": true,
"GIT_LASTCOMMITDATETIME": true
}
}
// global.d.ts - 解决ts找不到声明变量
declare const GIT_BRANCH: string
declare const GIT_COMMITHASH: string
declare const GIT_VERSION: string
declare const GIT_LASTCOMMITDATETIME: string
`$3
#### 执行自定义git命令runGitDefineCommand
`javascript
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { runGitDefineCommand } from 'git-revision-vite-plugin'// tips: 由于runGitDefineCommand返回一个Promise,
// 所以vite配置要使用异步配置(https://cn.vitejs.dev/config/#async-config)
export default defineConfig(async ({ command, mode }) => {
const tagInfo = await runGitDefineCommand('git tag')
return {
plugins: [
vue(),
GitRevisionVitePlugin()
],
define: {
'GIT_TAG': JSON.stringify(tagInfo)
}
}
})
// 该功能扩展实现了自定义执行git命令,这样这个插件的可玩性就增加了很多
`$3
`
v0.0.11:
fixed: 修复项目使用type: module, 设置esModule模式调用此插件报错问题,
参见https://github.com/a1067111756/git-revision-vite-plugin/issues/2
``