@@ -146,6 +146,7 @@ function getModulesOptions(options, loaderContext) {
146146 getLocalIdent,
147147 hashPrefix : '' ,
148148 exportGlobals : false ,
149+ namedExport : false ,
149150 } ;
150151
151152 if (
@@ -264,7 +265,13 @@ function getPreRequester({ loaders, loaderIndex }) {
264265 } ;
265266}
266267
267- function getImportCode ( loaderContext , exportType , imports , esModule ) {
268+ function getImportCode (
269+ loaderContext ,
270+ exportType ,
271+ imports ,
272+ esModule ,
273+ modulesOptions
274+ ) {
268275 let code = '' ;
269276
270277 if ( exportType === 'full' ) {
@@ -279,10 +286,12 @@ function getImportCode(loaderContext, exportType, imports, esModule) {
279286 }
280287
281288 for ( const item of imports ) {
282- const { importName, url } = item ;
289+ const { importName, url, icss } = item ;
283290
284291 code += esModule
285- ? `import ${ importName } from ${ url } ;\n`
292+ ? icss && modulesOptions . namedExport
293+ ? `import ${ importName } , * as ${ importName } _NAMED___ from ${ url } ;\n`
294+ : `import ${ importName } from ${ url } ;\n`
286295 : `var ${ importName } = require(${ url } );\n` ;
287296 }
288297
@@ -296,7 +305,8 @@ function getModuleCode(
296305 apiImports ,
297306 urlReplacements ,
298307 icssReplacements ,
299- esModule
308+ esModule ,
309+ modulesOptions
300310) {
301311 if ( exportType !== 'full' ) {
302312 return 'var ___CSS_LOADER_EXPORT___ = {};\n' ;
@@ -345,9 +355,12 @@ function getModuleCode(
345355 for ( const replacement of icssReplacements ) {
346356 const { replacementName, importName, localName } = replacement ;
347357
348- code = code . replace (
349- new RegExp ( replacementName , 'g' ) ,
350- ( ) => `" + ${ importName } .locals[${ JSON . stringify ( localName ) } ] + "`
358+ code = code . replace ( new RegExp ( replacementName , 'g' ) , ( ) =>
359+ modulesOptions . namedExport
360+ ? `" + ${ importName } _NAMED___[${ JSON . stringify (
361+ camelCase ( localName )
362+ ) } ] + "`
363+ : `" + ${ importName } .locals[${ JSON . stringify ( localName ) } ] + "`
351364 ) ;
352365 }
353366
@@ -369,13 +382,20 @@ function getExportCode(
369382) {
370383 let code = '' ;
371384 let localsCode = '' ;
385+ let namedCode = '' ;
372386
373387 const addExportToLocalsCode = ( name , value ) => {
374388 if ( localsCode ) {
375389 localsCode += `,\n` ;
376390 }
377391
378392 localsCode += `\t${ JSON . stringify ( name ) } : ${ JSON . stringify ( value ) } ` ;
393+
394+ if ( modulesOptions . namedExport ) {
395+ namedCode += `export const ${ camelCase ( name ) } = ${ JSON . stringify (
396+ value
397+ ) } ;\n`;
398+ }
379399 } ;
380400
381401 for ( const { name, value } of exports ) {
@@ -422,10 +442,22 @@ function getExportCode(
422442 new RegExp ( replacementName , 'g' ) ,
423443 ( ) => `" + ${ importName } .locals[${ JSON . stringify ( localName ) } ] + "`
424444 ) ;
445+
446+ if ( modulesOptions . namedExport ) {
447+ namedCode = namedCode . replace (
448+ new RegExp ( replacementName , 'g' ) ,
449+ ( ) =>
450+ `" + ${ importName } _NAMED___[${ JSON . stringify (
451+ camelCase ( localName )
452+ ) } ] + "`
453+ ) ;
454+ }
425455 }
426456
427457 if ( localsCode ) {
428- code += `___CSS_LOADER_EXPORT___.locals = {\n${ localsCode } \n};\n` ;
458+ code += namedCode
459+ ? `${ namedCode } \n`
460+ : `___CSS_LOADER_EXPORT___.locals = {\n${ localsCode } \n};\n` ;
429461 }
430462
431463 code += `${
0 commit comments