|
|
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
-
- const path = require("path");
- const ParserHelpers = require("./ParserHelpers");
-
- class CommonJsStuffPlugin {
- apply(compiler) {
- compiler.hooks.compilation.tap(
- "CommonJsStuffPlugin",
- (compilation, { normalModuleFactory }) => {
- const handler = (parser, parserOptions) => {
- parser.hooks.expression
- .for("require.main.require")
- .tap(
- "CommonJsStuffPlugin",
- ParserHelpers.expressionIsUnsupported(
- parser,
- "require.main.require is not supported by webpack."
- )
- );
- parser.hooks.expression
- .for("module.parent.require")
- .tap(
- "CommonJsStuffPlugin",
- ParserHelpers.expressionIsUnsupported(
- parser,
- "module.parent.require is not supported by webpack."
- )
- );
- parser.hooks.expression
- .for("require.main")
- .tap(
- "CommonJsStuffPlugin",
- ParserHelpers.toConstantDependencyWithWebpackRequire(
- parser,
- "__webpack_require__.c[__webpack_require__.s]"
- )
- );
- parser.hooks.expression
- .for("module.loaded")
- .tap("CommonJsStuffPlugin", expr => {
- parser.state.module.buildMeta.moduleConcatenationBailout =
- "module.loaded";
- return ParserHelpers.toConstantDependency(
- parser,
- "module.l"
- )(expr);
- });
- parser.hooks.expression
- .for("module.id")
- .tap("CommonJsStuffPlugin", expr => {
- parser.state.module.buildMeta.moduleConcatenationBailout =
- "module.id";
- return ParserHelpers.toConstantDependency(
- parser,
- "module.i"
- )(expr);
- });
- parser.hooks.expression
- .for("module.exports")
- .tap("CommonJsStuffPlugin", () => {
- const module = parser.state.module;
- const isHarmony =
- module.buildMeta && module.buildMeta.exportsType;
- if (!isHarmony) return true;
- });
- parser.hooks.evaluateIdentifier
- .for("module.hot")
- .tap(
- "CommonJsStuffPlugin",
- ParserHelpers.evaluateToIdentifier("module.hot", false)
- );
- parser.hooks.expression
- .for("module")
- .tap("CommonJsStuffPlugin", () => {
- const module = parser.state.module;
- const isHarmony =
- module.buildMeta && module.buildMeta.exportsType;
- let moduleJsPath = path.join(
- __dirname,
- "..",
- "buildin",
- isHarmony ? "harmony-module.js" : "module.js"
- );
- if (module.context) {
- moduleJsPath = path.relative(
- parser.state.module.context,
- moduleJsPath
- );
- if (!/^[A-Z]:/i.test(moduleJsPath)) {
- moduleJsPath = `./${moduleJsPath.replace(/\\/g, "/")}`;
- }
- }
- return ParserHelpers.addParsedVariableToModule(
- parser,
- "module",
- `require(${JSON.stringify(moduleJsPath)})(module)`
- );
- });
- };
-
- normalModuleFactory.hooks.parser
- .for("javascript/auto")
- .tap("CommonJsStuffPlugin", handler);
- normalModuleFactory.hooks.parser
- .for("javascript/dynamic")
- .tap("CommonJsStuffPlugin", handler);
- }
- );
- }
- }
- module.exports = CommonJsStuffPlugin;
|