| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | /*	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;
 |