UNPKG

1.93 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5
6"use strict";
7
8const { compareChunksNatural } = require("../util/comparators");
9const {
10 getShortChunkName,
11 getLongChunkName,
12 assignNames,
13 getUsedChunkIds,
14 assignAscendingChunkIds
15} = require("./IdHelpers");
16
17/** @typedef {import("../Chunk")} Chunk */
18/** @typedef {import("../Compiler")} Compiler */
19/** @typedef {import("../Module")} Module */
20
21class NamedChunkIdsPlugin {
22 constructor(options) {
23 this.delimiter = (options && options.delimiter) || "-";
24 this.context = options && options.context;
25 }
26
27 /**
28 * Apply the plugin
29 * @param {Compiler} compiler the compiler instance
30 * @returns {void}
31 */
32 apply(compiler) {
33 compiler.hooks.compilation.tap("NamedChunkIdsPlugin", compilation => {
34 const { hashFunction } = compilation.outputOptions;
35 compilation.hooks.chunkIds.tap("NamedChunkIdsPlugin", chunks => {
36 const chunkGraph = compilation.chunkGraph;
37 const context = this.context ? this.context : compiler.context;
38 const delimiter = this.delimiter;
39
40 const unnamedChunks = assignNames(
41 Array.from(chunks).filter(chunk => {
42 if (chunk.name) {
43 chunk.id = chunk.name;
44 chunk.ids = [chunk.name];
45 }
46 return chunk.id === null;
47 }),
48 chunk =>
49 getShortChunkName(
50 chunk,
51 chunkGraph,
52 context,
53 delimiter,
54 hashFunction,
55 compiler.root
56 ),
57 chunk =>
58 getLongChunkName(
59 chunk,
60 chunkGraph,
61 context,
62 delimiter,
63 hashFunction,
64 compiler.root
65 ),
66 compareChunksNatural(chunkGraph),
67 getUsedChunkIds(compilation),
68 (chunk, name) => {
69 chunk.id = name;
70 chunk.ids = [name];
71 }
72 );
73 if (unnamedChunks.length > 0) {
74 assignAscendingChunkIds(unnamedChunks, compilation);
75 }
76 });
77 });
78 }
79}
80
81module.exports = NamedChunkIdsPlugin;