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
2 years ago
|
"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
|