webpack/lib/dependencies/RequireEnsurePlugin.js

73 lines
1.9 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");
const PLUGIN_NAME = "RequireEnsurePlugin";
class RequireEnsurePlugin {
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()
);
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;