@@ -22,7 +22,6 @@ const propertyAccess = require("./util/propertyAccess");
2222const { register } = require ( "./util/serialization" ) ;
2323
2424/** @typedef {import("webpack-sources").Source } Source */
25- /** @typedef {import("../declarations/WebpackOptions").ExternalsPresets } ExternalsPresets */
2625/** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized } WebpackOptions */
2726/** @typedef {import("./Chunk") } Chunk */
2827/** @typedef {import("./ChunkGraph") } ChunkGraph */
@@ -54,7 +53,7 @@ const { register } = require("./util/serialization");
5453/** @typedef {import("./util/fs").InputFileSystem } InputFileSystem */
5554/** @typedef {import("./util/runtime").RuntimeSpec } RuntimeSpec */
5655
57- /** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined, externalsPresets: ExternalsPresets | undefined } } ImportDependencyMeta */
56+ /** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined } } ImportDependencyMeta */
5857/** @typedef {{ layer?: string, supports?: string, media?: string } } CssImportDependencyMeta */
5958
6059/** @typedef {ImportDependencyMeta | CssImportDependencyMeta } DependencyMeta */
@@ -167,7 +166,7 @@ const getSourceForImportExternal = (
167166 const importName = runtimeTemplate . outputOptions . importFunctionName ;
168167 if (
169168 ! runtimeTemplate . supportsDynamicImport ( ) &&
170- ( importName === "import" || importName = == "module-import" )
169+ ( importName === "import" || importName ! == "module-import" )
171170 ) {
172171 throw new Error (
173172 "The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
@@ -579,25 +578,6 @@ class ExternalModule extends Module {
579578 canMangle = true ;
580579 }
581580 break ;
582- case "module" :
583- if ( this . buildInfo . module ) {
584- if ( ! Array . isArray ( request ) || request . length === 1 ) {
585- this . buildMeta . exportsType = "namespace" ;
586- canMangle = true ;
587- }
588- } else {
589- this . buildMeta . async = true ;
590- EnvironmentNotSupportAsyncWarning . check (
591- this ,
592- compilation . runtimeTemplate ,
593- "external module"
594- ) ;
595- if ( ! Array . isArray ( request ) || request . length === 1 ) {
596- this . buildMeta . exportsType = "namespace" ;
597- canMangle = false ;
598- }
599- }
600- break ;
601581 case "script" :
602582 this . buildMeta . async = true ;
603583 EnvironmentNotSupportAsyncWarning . check (
@@ -614,18 +594,52 @@ class ExternalModule extends Module {
614594 "external promise"
615595 ) ;
616596 break ;
597+ case "module" :
617598 case "import" :
618- this . buildMeta . async = true ;
619- EnvironmentNotSupportAsyncWarning . check (
620- this ,
621- compilation . runtimeTemplate ,
622- "external import"
623- ) ;
624- if ( ! Array . isArray ( request ) || request . length === 1 ) {
625- this . buildMeta . exportsType = "namespace" ;
626- canMangle = false ;
599+ case "module-import" : {
600+ const type =
601+ externalType === "module-import" &&
602+ this . dependencyMeta &&
603+ /** @type {ImportDependencyMeta } */ ( this . dependencyMeta ) . externalType
604+ ? /** @type {ImportDependencyMeta } */ ( this . dependencyMeta )
605+ . externalType
606+ : externalType ;
607+
608+ if ( type === "module" ) {
609+ if ( this . buildInfo . module ) {
610+ if ( ! Array . isArray ( request ) || request . length === 1 ) {
611+ this . buildMeta . exportsType = "namespace" ;
612+ canMangle = true ;
613+ }
614+ } else {
615+ this . buildMeta . async = true ;
616+ EnvironmentNotSupportAsyncWarning . check (
617+ this ,
618+ compilation . runtimeTemplate ,
619+ "external module"
620+ ) ;
621+ if ( ! Array . isArray ( request ) || request . length === 1 ) {
622+ this . buildMeta . exportsType = "namespace" ;
623+ canMangle = false ;
624+ }
625+ }
626+ }
627+
628+ if ( type === "import" ) {
629+ this . buildMeta . async = true ;
630+ EnvironmentNotSupportAsyncWarning . check (
631+ this ,
632+ compilation . runtimeTemplate ,
633+ "external import"
634+ ) ;
635+ if ( ! Array . isArray ( request ) || request . length === 1 ) {
636+ this . buildMeta . exportsType = "namespace" ;
637+ canMangle = false ;
638+ }
627639 }
640+
628641 break ;
642+ }
629643 }
630644 this . addDependency ( new StaticExportsDependency ( true , canMangle ) ) ;
631645 callback ( ) ;
@@ -659,36 +673,6 @@ class ExternalModule extends Module {
659673
660674 _getRequestAndExternalType ( ) {
661675 let { request, externalType } = this ;
662-
663- if ( externalType === "module-import" ) {
664- const dependencyMeta = /** @type {ImportDependencyMeta } */ (
665- this . dependencyMeta
666- ) ;
667-
668- if ( dependencyMeta && dependencyMeta . externalType ) {
669- externalType = dependencyMeta . externalType ;
670- } else if ( dependencyMeta && dependencyMeta . externalsPresets ) {
671- const presets = dependencyMeta . externalsPresets ;
672- // TODO: what if user set multiple presets?
673- if ( presets . web ) {
674- externalType = "module" ;
675- } else if ( presets . webAsync ) {
676- externalType = "import" ;
677- } else if (
678- presets . electron ||
679- presets . electronMain ||
680- presets . electronPreload ||
681- presets . electronRenderer ||
682- presets . node ||
683- presets . nwjs
684- ) {
685- externalType = "node-commonjs" ;
686- }
687- } else {
688- externalType = "commonjs" ;
689- }
690- }
691-
692676 if ( typeof request === "object" && ! Array . isArray ( request ) )
693677 request = request [ externalType ] ;
694678 return { request, externalType } ;
@@ -753,43 +737,58 @@ class ExternalModule extends Module {
753737 runtimeTemplate
754738 ) ;
755739 }
756- case "import" :
757- return getSourceForImportExternal (
758- request ,
759- runtimeTemplate ,
760- /** @type {ImportDependencyMeta } */ ( dependencyMeta )
761- ) ;
762740 case "script" :
763741 return getSourceForScriptExternal ( request , runtimeTemplate ) ;
764- case "module" : {
765- if ( ! ( /** @type { BuildInfo } */ ( this . buildInfo ) . module ) ) {
766- if ( ! runtimeTemplate . supportsDynamicImport ( ) ) {
767- throw new Error (
768- `The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script ${
769- runtimeTemplate . supportsEcmaScriptModuleSyntax ( )
770- ? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
771- : ""
772- } `
773- ) ;
774- }
742+ case "module" :
743+ case "import" :
744+ case "module-import" : {
745+ const type =
746+ externalType === "module- import" &&
747+ dependencyMeta &&
748+ /** @type { ImportDependencyMeta } */ ( dependencyMeta ) . externalType
749+ ? /** @type { ImportDependencyMeta } */ ( dependencyMeta ) . externalType
750+ : externalType ;
751+
752+ if ( type === "import" ) {
775753 return getSourceForImportExternal (
776754 request ,
777755 runtimeTemplate ,
778756 /** @type {ImportDependencyMeta } */ ( dependencyMeta )
779757 ) ;
780758 }
781- if ( ! runtimeTemplate . supportsEcmaScriptModuleSyntax ( ) ) {
782- throw new Error (
783- "The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
759+
760+ if ( type === "module" ) {
761+ if ( ! ( /** @type {BuildInfo } */ ( this . buildInfo ) . module ) ) {
762+ if ( ! runtimeTemplate . supportsDynamicImport ( ) ) {
763+ throw new Error (
764+ `The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script${
765+ runtimeTemplate . supportsEcmaScriptModuleSyntax ( )
766+ ? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
767+ : ""
768+ } `
769+ ) ;
770+ }
771+ return getSourceForImportExternal (
772+ request ,
773+ runtimeTemplate ,
774+ /** @type {ImportDependencyMeta } */ ( dependencyMeta )
775+ ) ;
776+ }
777+ if ( ! runtimeTemplate . supportsEcmaScriptModuleSyntax ( ) ) {
778+ throw new Error (
779+ "The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
780+ ) ;
781+ }
782+ return getSourceForModuleExternal (
783+ request ,
784+ moduleGraph . getExportsInfo ( this ) ,
785+ runtime ,
786+ runtimeTemplate ,
787+ /** @type {ImportDependencyMeta } */ ( dependencyMeta )
784788 ) ;
785789 }
786- return getSourceForModuleExternal (
787- request ,
788- moduleGraph . getExportsInfo ( this ) ,
789- runtime ,
790- runtimeTemplate ,
791- /** @type {ImportDependencyMeta } */ ( dependencyMeta )
792- ) ;
790+
791+ break ;
793792 }
794793 case "var" :
795794 case "promise" :
0 commit comments