webpack/lib/dependencies/RequireIncludePlugin.js

59 lines
1.6 KiB
JavaScript
Raw Normal View History

2013-02-16 00:08:14 +08:00
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const RequireIncludeDependency = require("./RequireIncludeDependency");
const RequireIncludeDependencyParserPlugin = require("./RequireIncludeDependencyParserPlugin");
2018-07-03 21:35:24 +08:00
const {
evaluateToString,
toConstantDependency
} = require("../JavascriptParserHelpers");
2013-02-16 00:08:14 +08:00
class RequireIncludePlugin {
apply(compiler) {
2018-02-25 09:00:20 +08:00
compiler.hooks.compilation.tap(
"RequireIncludePlugin",
(compilation, { normalModuleFactory }) => {
compilation.dependencyFactories.set(
RequireIncludeDependency,
normalModuleFactory
);
compilation.dependencyTemplates.set(
RequireIncludeDependency,
new RequireIncludeDependency.Template()
);
2018-02-25 09:00:20 +08:00
const handler = (parser, parserOptions) => {
if (
typeof parserOptions.requireInclude !== "undefined" &&
!parserOptions.requireInclude
)
return;
2018-02-25 09:00:20 +08:00
new RequireIncludeDependencyParserPlugin().apply(parser);
parser.hooks.evaluateTypeof
.for("require.include")
2018-07-03 16:24:29 +08:00
.tap("RequireIncludePlugin", evaluateToString("function"));
2018-02-25 09:00:20 +08:00
parser.hooks.typeof
.for("require.include")
.tap(
"RequireIncludePlugin",
2018-07-03 16:24:29 +08:00
toConstantDependency(parser, JSON.stringify("function"))
2018-02-25 09:00:20 +08:00
);
};
2018-02-25 09:00:20 +08:00
normalModuleFactory.hooks.parser
.for("javascript/auto")
.tap("RequireIncludePlugin", handler);
normalModuleFactory.hooks.parser
.for("javascript/dynamic")
.tap("RequireIncludePlugin", handler);
}
);
}
}
module.exports = RequireIncludePlugin;