1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const { find } = require("../util/SetHelpers");
- const {
- compareModulesByPreOrderIndexOrIdentifier,
- compareModulesByPostOrderIndexOrIdentifier
- } = require("../util/comparators");
- /** @typedef {import("../Compiler")} Compiler */
- class ChunkModuleIdRangePlugin {
- constructor(options) {
- this.options = options;
- }
- /**
- * Apply the plugin
- * @param {Compiler} compiler the compiler instance
- * @returns {void}
- */
- apply(compiler) {
- const options = this.options;
- compiler.hooks.compilation.tap("ChunkModuleIdRangePlugin", compilation => {
- const moduleGraph = compilation.moduleGraph;
- compilation.hooks.moduleIds.tap("ChunkModuleIdRangePlugin", modules => {
- const chunkGraph = compilation.chunkGraph;
- const chunk = find(
- compilation.chunks,
- chunk => chunk.name === options.name
- );
- if (!chunk) {
- throw new Error(
- `ChunkModuleIdRangePlugin: Chunk with name '${options.name}"' was not found`
- );
- }
- let chunkModules;
- if (options.order) {
- let cmpFn;
- switch (options.order) {
- case "index":
- case "preOrderIndex":
- cmpFn = compareModulesByPreOrderIndexOrIdentifier(moduleGraph);
- break;
- case "index2":
- case "postOrderIndex":
- cmpFn = compareModulesByPostOrderIndexOrIdentifier(moduleGraph);
- break;
- default:
- throw new Error(
- "ChunkModuleIdRangePlugin: unexpected value of order"
- );
- }
- chunkModules = chunkGraph.getOrderedChunkModules(chunk, cmpFn);
- } else {
- chunkModules = Array.from(modules)
- .filter(m => {
- return chunkGraph.isModuleInChunk(m, chunk);
- })
- .sort(compareModulesByPreOrderIndexOrIdentifier(moduleGraph));
- }
- let currentId = options.start || 0;
- for (let i = 0; i < chunkModules.length; i++) {
- const m = chunkModules[i];
- if (m.needId && chunkGraph.getModuleId(m) === null) {
- chunkGraph.setModuleId(m, currentId++);
- }
- if (options.end && currentId > options.end) break;
- }
- });
- });
- }
- }
- module.exports = ChunkModuleIdRangePlugin;
|