mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
	
	
		
			115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /* | ||
|  | 	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; |