webpack/lib/dependencies/RequireEnsurePlugin.js

87 lines
2.4 KiB
JavaScript
Raw Normal View History

2013-01-31 01:49:25 +08:00
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
2018-07-30 23:08:51 +08:00
"use strict";
2013-01-31 01:49:25 +08:00
const RequireEnsureDependency = require("./RequireEnsureDependency");
2018-07-30 23:08:51 +08:00
const RequireEnsureItemDependency = require("./RequireEnsureItemDependency");
2013-01-31 01:49:25 +08:00
const RequireEnsureDependenciesBlockParserPlugin = require("./RequireEnsureDependenciesBlockParserPlugin");
2013-01-31 01:49:25 +08:00
const {
JAVASCRIPT_MODULE_TYPE_AUTO,
JAVASCRIPT_MODULE_TYPE_DYNAMIC
} = require("../ModuleTypeConstants");
2018-07-03 21:35:24 +08:00
const {
evaluateToString,
toConstantDependency
} = require("../javascript/JavascriptParserHelpers");
2023-05-22 08:03:05 +08:00
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
2023-05-22 04:31:30 +08:00
/** @typedef {import("../Compiler")} Compiler */
2023-05-22 08:03:05 +08:00
/** @typedef {import("../javascript/JavascriptParser")} Parser */
2023-05-22 04:31:30 +08:00
const PLUGIN_NAME = "RequireEnsurePlugin";
class RequireEnsurePlugin {
2023-05-22 04:31:30 +08:00
/**
* Apply the plugin
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
apply(compiler) {
2018-02-25 09:00:20 +08:00
compiler.hooks.compilation.tap(
PLUGIN_NAME,
2018-02-25 09:00:20 +08:00
(compilation, { normalModuleFactory }) => {
compilation.dependencyFactories.set(
RequireEnsureItemDependency,
normalModuleFactory
);
compilation.dependencyTemplates.set(
RequireEnsureItemDependency,
new RequireEnsureItemDependency.Template()
);
compilation.dependencyTemplates.set(
RequireEnsureDependency,
new RequireEnsureDependency.Template()
);
2023-05-22 08:03:05 +08:00
/**
* @param {Parser} parser parser parser
* @param {JavascriptParserOptions} parserOptions parserOptions
* @returns {void}
*/
2018-02-25 09:00:20 +08:00
const handler = (parser, parserOptions) => {
if (
2018-08-21 08:26:50 +08:00
parserOptions.requireEnsure !== undefined &&
2018-02-25 09:00:20 +08:00
!parserOptions.requireEnsure
)
return;
new RequireEnsureDependenciesBlockParserPlugin().apply(parser);
parser.hooks.evaluateTypeof
.for("require.ensure")
.tap(PLUGIN_NAME, evaluateToString("function"));
2018-02-25 09:00:20 +08:00
parser.hooks.typeof
.for("require.ensure")
.tap(
PLUGIN_NAME,
2018-07-03 16:24:29 +08:00
toConstantDependency(parser, JSON.stringify("function"))
2018-02-25 09:00:20 +08:00
);
};
normalModuleFactory.hooks.parser
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
.tap(PLUGIN_NAME, handler);
2018-02-25 09:00:20 +08:00
normalModuleFactory.hooks.parser
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
.tap(PLUGIN_NAME, handler);
2018-02-25 09:00:20 +08:00
}
);
}
}
module.exports = RequireEnsurePlugin;