@@ -16,6 +16,8 @@ const {
1616const RuntimeGlobals = require ( "./RuntimeGlobals" ) ;
1717const WebpackError = require ( "./WebpackError" ) ;
1818const ConstDependency = require ( "./dependencies/ConstDependency" ) ;
19+ const ModuleInitFragmentDependency = require ( "./dependencies/ModuleInitFragmentDependency" ) ;
20+ const RuntimeRequirementsDependency = require ( "./dependencies/RuntimeRequirementsDependency" ) ;
1921const BasicEvaluatedExpression = require ( "./javascript/BasicEvaluatedExpression" ) ;
2022const JavascriptModulesPlugin = require ( "./javascript/JavascriptModulesPlugin" ) ;
2123const {
@@ -160,6 +162,10 @@ class APIPlugin {
160162 ConstDependency ,
161163 new ConstDependency . Template ( )
162164 ) ;
165+ compilation . dependencyTemplates . set (
166+ ModuleInitFragmentDependency ,
167+ new ModuleInitFragmentDependency . Template ( )
168+ ) ;
163169
164170 compilation . hooks . runtimeRequirementInTree
165171 . for ( RuntimeGlobals . chunkName )
@@ -201,6 +207,40 @@ class APIPlugin {
201207 * @param {JavascriptParser } parser the parser
202208 */
203209 const handler = ( parser ) => {
210+ parser . hooks . preDeclarator . tap ( PLUGIN_NAME , ( declarator ) => {
211+ if (
212+ parser . scope . topLevelScope === true &&
213+ declarator . id . type === "Identifier" &&
214+ declarator . id . name === "module"
215+ ) {
216+ /** @type {BuildInfo } */
217+ ( parser . state . module . buildInfo ) . moduleArgument =
218+ "__webpack_module__" ;
219+ }
220+ } ) ;
221+
222+ parser . hooks . preStatement . tap ( PLUGIN_NAME , ( statement ) => {
223+ if ( parser . scope . topLevelScope === true ) {
224+ if (
225+ statement . type === "FunctionDeclaration" &&
226+ statement . id &&
227+ statement . id . name === "module"
228+ ) {
229+ /** @type {BuildInfo } */
230+ ( parser . state . module . buildInfo ) . moduleArgument =
231+ "__webpack_module__" ;
232+ } else if (
233+ statement . type === "ClassDeclaration" &&
234+ statement . id &&
235+ statement . id . name === "module"
236+ ) {
237+ /** @type {BuildInfo } */
238+ ( parser . state . module . buildInfo ) . moduleArgument =
239+ "__webpack_module__" ;
240+ }
241+ }
242+ } ) ;
243+
204244 for ( const key of Object . keys ( REPLACEMENTS ) ) {
205245 const info = REPLACEMENTS [ key ] ;
206246 parser . hooks . expression . for ( key ) . tap ( PLUGIN_NAME , ( expression ) => {
@@ -275,13 +315,28 @@ class APIPlugin {
275315 /** @type {BuildInfo } */
276316 ( parser . state . module . buildInfo ) . moduleConcatenationBailout =
277317 "__webpack_module__.id" ;
278- const dep = new ConstDependency (
279- `${ parser . state . module . moduleArgument } .id` ,
280- /** @type {Range } */ ( expr . range ) ,
281- [ RuntimeGlobals . moduleId ]
282- ) ;
283- dep . loc = /** @type {DependencyLocation } */ ( expr . loc ) ;
284- parser . state . module . addPresentationalDependency ( dep ) ;
318+ const moduleArgument = parser . state . module . moduleArgument ;
319+ if ( moduleArgument === "__webpack_module__" ) {
320+ const dep = new RuntimeRequirementsDependency ( [
321+ RuntimeGlobals . moduleId
322+ ] ) ;
323+ dep . loc = /** @type {DependencyLocation } */ ( expr . loc ) ;
324+ parser . state . module . addPresentationalDependency ( dep ) ;
325+ } else {
326+ const initDep = new ModuleInitFragmentDependency (
327+ `var __webpack_internal_module_id__ = ${ moduleArgument } .id;\n` ,
328+ [ RuntimeGlobals . moduleId ] ,
329+ "__webpack_internal_module_id__"
330+ ) ;
331+ parser . state . module . addPresentationalDependency ( initDep ) ;
332+ const dep = new ConstDependency (
333+ "__webpack_internal_module_id__" ,
334+ /** @type {Range } */ ( expr . range ) ,
335+ [ ]
336+ ) ;
337+ dep . loc = /** @type {DependencyLocation } */ ( expr . loc ) ;
338+ parser . state . module . addPresentationalDependency ( dep ) ;
339+ }
285340 return true ;
286341 } ) ;
287342
@@ -291,13 +346,28 @@ class APIPlugin {
291346 /** @type {BuildInfo } */
292347 ( parser . state . module . buildInfo ) . moduleConcatenationBailout =
293348 "__webpack_module__" ;
294- const dep = new ConstDependency (
295- parser . state . module . moduleArgument ,
296- /** @type {Range } */ ( expr . range ) ,
297- [ RuntimeGlobals . module ]
298- ) ;
299- dep . loc = /** @type {DependencyLocation } */ ( expr . loc ) ;
300- parser . state . module . addPresentationalDependency ( dep ) ;
349+ const moduleArgument = parser . state . module . moduleArgument ;
350+ if ( moduleArgument === "__webpack_module__" ) {
351+ const dep = new RuntimeRequirementsDependency ( [
352+ RuntimeGlobals . module
353+ ] ) ;
354+ dep . loc = /** @type {DependencyLocation } */ ( expr . loc ) ;
355+ parser . state . module . addPresentationalDependency ( dep ) ;
356+ } else {
357+ const initDep = new ModuleInitFragmentDependency (
358+ `var __webpack_internal_module__ = ${ moduleArgument } ;\n` ,
359+ [ RuntimeGlobals . module ] ,
360+ "__webpack_internal_module__"
361+ ) ;
362+ parser . state . module . addPresentationalDependency ( initDep ) ;
363+ const dep = new ConstDependency (
364+ "__webpack_internal_module__" ,
365+ /** @type {Range } */ ( expr . range ) ,
366+ [ ]
367+ ) ;
368+ dep . loc = /** @type {DependencyLocation } */ ( expr . loc ) ;
369+ parser . state . module . addPresentationalDependency ( dep ) ;
370+ }
301371 return true ;
302372 } ) ;
303373 parser . hooks . evaluateTypeof
0 commit comments