@@ -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