UNPKG

webpack

Version:

Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

71 lines (63 loc) 2.25 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Natsu @xiaoxiaojx */ "use strict"; const { updateHashForEntryStartup } = require("./StartupHelpers"); /** @typedef {import("../ChunkGraph")} ChunkGraph */ /** @typedef {import("../Module")} Module */ /** @typedef {import("../Chunk")} Chunk */ /** @typedef {import("../Entrypoint")} Entrypoint */ /** @typedef {import("../util/Hash")} Hash */ /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */ /** * Gets information about a chunk including its entries and runtime chunk * @param {Chunk} chunk The chunk to get information for * @param {ChunkGraph} chunkGraph The chunk graph containing the chunk * @returns {{ entries: [Module, Entrypoint | undefined][], runtimeChunk: Chunk | null }} Object containing chunk entries and runtime chunk */ function getChunkInfo(chunk, chunkGraph) { const entries = [ ...chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk) ]; const runtimeChunk = entries.length > 0 ? /** @type {Entrypoint[][]} */ (entries)[0][1].getRuntimeChunk() : null; return { entries, runtimeChunk }; } /** * Creates a chunk hash handler * @param {string} name The name of the chunk * @returns {(chunk: Chunk, hash: Hash, { chunkGraph }: ChunkHashContext) => void} The chunk hash handler */ function createChunkHashHandler(name) { /** * @param {Chunk} chunk The chunk to get information for * @param {Hash} hash The hash to update * @param {ChunkHashContext} chunkHashContext The chunk hash context * @returns {void} */ return (chunk, hash, { chunkGraph }) => { if (chunk.hasRuntime()) return; const { entries, runtimeChunk } = getChunkInfo(chunk, chunkGraph); hash.update(name); hash.update("1"); if (runtimeChunk && runtimeChunk.hash) { // https://github.com/webpack/webpack/issues/19439 // Any change to runtimeChunk should trigger a hash update, // we shouldn't depend on or inspect its internal implementation. // import __webpack_require__ from "./runtime-main.e9400aee33633a3973bd.js"; hash.update(runtimeChunk.hash); } updateHashForEntryStartup(hash, chunkGraph, entries, chunk); }; } module.exports = { createChunkHashHandler, getChunkInfo };