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.
93 lines
2.8 KiB
93 lines
2.8 KiB
/* |
|
MIT License http://www.opensource.org/licenses/mit-license.php |
|
Author Tobias Koppers @sokra |
|
*/ |
|
|
|
"use strict"; |
|
|
|
/** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescription */ |
|
/** @typedef {import("../declarations/WebpackOptions").EntryNormalized} Entry */ |
|
/** @typedef {import("./Compiler")} Compiler */ |
|
/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */ |
|
|
|
class EntryOptionPlugin { |
|
/** |
|
* @param {Compiler} compiler the compiler instance one is tapping into |
|
* @returns {void} |
|
*/ |
|
apply(compiler) { |
|
compiler.hooks.entryOption.tap("EntryOptionPlugin", (context, entry) => { |
|
EntryOptionPlugin.applyEntryOption(compiler, context, entry); |
|
return true; |
|
}); |
|
} |
|
|
|
/** |
|
* @param {Compiler} compiler the compiler |
|
* @param {string} context context directory |
|
* @param {Entry} entry request |
|
* @returns {void} |
|
*/ |
|
static applyEntryOption(compiler, context, entry) { |
|
if (typeof entry === "function") { |
|
const DynamicEntryPlugin = require("./DynamicEntryPlugin"); |
|
new DynamicEntryPlugin(context, entry).apply(compiler); |
|
} else { |
|
const EntryPlugin = require("./EntryPlugin"); |
|
for (const name of Object.keys(entry)) { |
|
const desc = entry[name]; |
|
const options = EntryOptionPlugin.entryDescriptionToOptions( |
|
compiler, |
|
name, |
|
desc |
|
); |
|
for (const entry of desc.import) { |
|
new EntryPlugin(context, entry, options).apply(compiler); |
|
} |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* @param {Compiler} compiler the compiler |
|
* @param {string} name entry name |
|
* @param {EntryDescription} desc entry description |
|
* @returns {EntryOptions} options for the entry |
|
*/ |
|
static entryDescriptionToOptions(compiler, name, desc) { |
|
/** @type {EntryOptions} */ |
|
const options = { |
|
name, |
|
filename: desc.filename, |
|
runtime: desc.runtime, |
|
layer: desc.layer, |
|
dependOn: desc.dependOn, |
|
baseUri: desc.baseUri, |
|
publicPath: desc.publicPath, |
|
chunkLoading: desc.chunkLoading, |
|
asyncChunks: desc.asyncChunks, |
|
wasmLoading: desc.wasmLoading, |
|
library: desc.library |
|
}; |
|
if (desc.layer !== undefined && !compiler.options.experiments.layers) { |
|
throw new Error( |
|
"'entryOptions.layer' is only allowed when 'experiments.layers' is enabled" |
|
); |
|
} |
|
if (desc.chunkLoading) { |
|
const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin"); |
|
EnableChunkLoadingPlugin.checkEnabled(compiler, desc.chunkLoading); |
|
} |
|
if (desc.wasmLoading) { |
|
const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin"); |
|
EnableWasmLoadingPlugin.checkEnabled(compiler, desc.wasmLoading); |
|
} |
|
if (desc.library) { |
|
const EnableLibraryPlugin = require("./library/EnableLibraryPlugin"); |
|
EnableLibraryPlugin.checkEnabled(compiler, desc.library.type); |
|
} |
|
return options; |
|
} |
|
} |
|
|
|
module.exports = EntryOptionPlugin;
|
|
|