@@ -26,7 +26,7 @@ class PreserveModuleNamePlugin {
2626 if ( m . constructor . name === "ConcatenatedModule" )
2727 modulesBeforeConcat . splice ( i -- , 1 , ...m [ "modules" ] ) ;
2828 }
29- for ( let module of getPreservedModules ( modules ) ) {
29+ for ( let module of getPreservedModules ( modules , alias ) ) {
3030 // Even though it's imported by Aurelia, it's still possible that the module
3131 // became the _root_ of a ConcatenatedModule.
3232 // We use `constructor.name` rather than `instanceof` for compat. with Webpack 2.
@@ -59,7 +59,7 @@ class PreserveModuleNamePlugin {
5959}
6060exports . PreserveModuleNamePlugin = PreserveModuleNamePlugin ;
6161;
62- function getPreservedModules ( modules ) {
62+ function getPreservedModules ( modules , aliases ) {
6363 return new Set ( modules . filter ( m => {
6464 // Some modules might have [preserveModuleName] already set, see ConventionDependenciesPlugin.
6565 let value = m [ exports . preserveModuleName ] ;
@@ -73,6 +73,29 @@ function getPreservedModules(modules) {
7373 m [ exports . preserveModuleName ] = req ;
7474 return true ;
7575 }
76+ // Since its relative, link it with the module alias if possible
77+ const reasonRequest = r . module && r . module . rawRequest ;
78+ const moduleDependency = r . dependency && r . dependency . module ;
79+ const moduleRequest = moduleDependency && removeLoaders ( moduleDependency . request ) ;
80+ if ( req && aliases && reasonRequest && moduleRequest ) {
81+ const aliasMatches = Object . keys ( aliases ) . filter ( ( alias ) => {
82+ const aliasPath = aliases [ alias ] ;
83+ const matchPath = ! ! ( moduleRequest . match ( new RegExp ( `^${ aliasPath } ` ) ) ) ;
84+ const matchKey = ! ! ( reasonRequest . match ( new RegExp ( `^${ alias } ` ) ) ) ;
85+ // We want to match against the alias file path AND the path that is being requested
86+ // This allows us to use relative files inside aliased files
87+ return ( matchPath && matchKey ) ;
88+ } ) ;
89+ // Invalid?
90+ if ( aliasMatches . length > 1 ) {
91+ throw new Error ( `Incorrect alias usage. "${ reasonRequest } " is duplicated in ${ aliasMatches } ` ) ;
92+ }
93+ else if ( aliasMatches . length === 1 ) {
94+ const aliasKey = aliasMatches [ 0 ] ;
95+ m [ exports . preserveModuleName ] = moduleRequest . replace ( aliases [ aliasKey ] , aliasKey ) ;
96+ return true ;
97+ }
98+ }
7699 }
77100 return ! ! value ;
78101 } ) ) ;
0 commit comments