UNPKG

git-rev-webpack-plugin

Version:

Webpack plugin to use git branch, hash and tag as substitutions for file names

62 lines (51 loc) 2 kB
import { Compiler } from 'webpack'; import { runGit } from './utils'; interface Options { path?: string; branchCommand?: string; hashCommand?: string; tagCommand?: string; } function GitRevPlugin(this: Options, options: Options = {}): void { this.path = options.path; this.branchCommand = options.branchCommand || 'rev-parse --abbrev-ref HEAD'; this.hashCommand = options.hashCommand || 'rev-parse --short HEAD'; this.tagCommand = options.tagCommand || 'describe --abbrev=0 --tags'; } GitRevPlugin.prototype.apply = function apply(compiler: Compiler): void { const REGEXP_BRANCH = /\[git-branch\]/gi; const REGEXP_HASH = /\[git-hash\]/gi; const REGEXP_TAG = /\[git-tag\]/gi; const currentBranch = runGit(this.path, this.branchCommand); const currentHash = runGit(this.path, this.hashCommand); const currentTag = runGit(this.path, this.tagCommand); compiler.hooks.compilation.tap('compilation', compilation => { /* istanbul ignore else */ if (typeof compilation.hooks.processAssets !== 'undefined') { compilation.hooks.assetPath.tap('asset-path', path => { return path .replace(REGEXP_BRANCH, currentBranch) .replace(REGEXP_HASH, currentHash) .replace(REGEXP_TAG, currentTag); }); } else { /* istanbul ignore next */ compilation.mainTemplate.hooks.assetPath.tap('asset-path', (path: string) => { return path .replace(REGEXP_BRANCH, currentBranch) .replace(REGEXP_HASH, currentHash) .replace(REGEXP_TAG, currentTag); }); } }); }; GitRevPlugin.prototype.branch = function branch(): string { return runGit(this.path, this.branchCommand); }; GitRevPlugin.prototype.hash = function hash(long = false): string { return runGit(this.path, long ? this.hashCommand.replace(' --short', '') : this.hashCommand); }; GitRevPlugin.prototype.tag = function tag(): string { return runGit(this.path, this.tagCommand); }; export default GitRevPlugin;