You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
3.1 KiB
74 lines
3.1 KiB
"use strict"; |
|
var __importDefault = (this && this.__importDefault) || function (mod) { |
|
return (mod && mod.__esModule) ? mod : { "default": mod }; |
|
}; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.WebpackManifestPlugin = exports.getCompilerHooks = void 0; |
|
const path_1 = require("path"); |
|
const webpack_1 = __importDefault(require("webpack")); |
|
const NormalModule_1 = __importDefault(require("webpack/lib/NormalModule")); |
|
const hooks_1 = require("./hooks"); |
|
Object.defineProperty(exports, "getCompilerHooks", { enumerable: true, get: function () { return hooks_1.getCompilerHooks; } }); |
|
const emitCountMap = new Map(); |
|
const defaults = { |
|
assetHookStage: Infinity, |
|
basePath: '', |
|
fileName: 'manifest.json', |
|
filter: null, |
|
generate: void 0, |
|
map: null, |
|
publicPath: null, |
|
removeKeyHash: /([a-f0-9]{16,32}\.?)/gi, |
|
seed: void 0, |
|
serialize(manifest) { |
|
return JSON.stringify(manifest, null, 2); |
|
}, |
|
sort: null, |
|
transformExtensions: /^(gz|map)$/i, |
|
useEntryKeys: false, |
|
useLegacyEmit: false, |
|
writeToFileEmit: false |
|
}; |
|
class WebpackManifestPlugin { |
|
constructor(opts) { |
|
this.options = Object.assign({}, defaults, opts); |
|
} |
|
apply(compiler) { |
|
var _a, _b, _c; |
|
const moduleAssets = {}; |
|
const manifestFileName = path_1.resolve(((_a = compiler.options.output) === null || _a === void 0 ? void 0 : _a.path) || './', this.options.fileName); |
|
const manifestAssetId = path_1.relative(((_b = compiler.options.output) === null || _b === void 0 ? void 0 : _b.path) || './', manifestFileName); |
|
const beforeRun = hooks_1.beforeRunHook.bind(this, { emitCountMap, manifestFileName }); |
|
const emit = hooks_1.emitHook.bind(this, { |
|
compiler, |
|
emitCountMap, |
|
manifestAssetId, |
|
manifestFileName, |
|
moduleAssets, |
|
options: this.options |
|
}); |
|
const normalModuleLoader = hooks_1.normalModuleLoaderHook.bind(this, { moduleAssets }); |
|
const hookOptions = { |
|
name: 'WebpackManifestPlugin', |
|
stage: this.options.assetHookStage |
|
}; |
|
compiler.hooks.compilation.tap(hookOptions, (compilation) => { |
|
const hook = !NormalModule_1.default.getCompilationHooks |
|
? compilation.hooks.normalModuleLoader |
|
: NormalModule_1.default.getCompilationHooks(compilation).loader; |
|
hook.tap(hookOptions, normalModuleLoader); |
|
}); |
|
if (((_c = webpack_1.default.version) === null || _c === void 0 ? void 0 : _c.startsWith('4')) || this.options.useLegacyEmit === true) { |
|
compiler.hooks.emit.tap(hookOptions, emit); |
|
} |
|
else { |
|
compiler.hooks.thisCompilation.tap(hookOptions, (compilation) => { |
|
compilation.hooks.processAssets.tap(hookOptions, () => emit(compilation)); |
|
}); |
|
} |
|
compiler.hooks.run.tap(hookOptions, beforeRun); |
|
compiler.hooks.watchRun.tap(hookOptions, beforeRun); |
|
} |
|
} |
|
exports.WebpackManifestPlugin = WebpackManifestPlugin; |
|
//# sourceMappingURL=index.js.map
|