1
1
// @flow
2
2
3
3
import type { Root } from 'postcss' ;
4
- import type { FilePath , MutableAsset } from '@parcel/types' ;
4
+ import type { FilePath , MutableAsset , PluginOptions } from '@parcel/types' ;
5
5
6
6
import { hashString } from '@parcel/hash' ;
7
7
import SourceMap from '@parcel/source-map' ;
@@ -10,8 +10,6 @@ import {createDependencyLocation, remapSourceLocation} from '@parcel/utils';
10
10
import postcss from 'postcss' ;
11
11
import nullthrows from 'nullthrows' ;
12
12
import valueParser from 'postcss-value-parser' ;
13
- import postcssModules from 'postcss-modules' ;
14
- import FileSystemLoader from 'postcss-modules/build/css-loader-core/loader' ;
15
13
import semver from 'semver' ;
16
14
import path from 'path' ;
17
15
@@ -274,10 +272,20 @@ async function compileCSSModules(asset, env, program, resolve, options) {
274
272
} ) ;
275
273
}
276
274
275
+ let postcssModules = await options . packageManager . require (
276
+ 'postcss-modules' ,
277
+ asset . filePath ,
278
+ {
279
+ range : '^4.3.0' ,
280
+ saveDev : true ,
281
+ shouldAutoInstall : options . shouldAutoInstall ,
282
+ } ,
283
+ ) ;
284
+
277
285
let { root} = await postcss ( [
278
286
postcssModules ( {
279
287
getJSON : ( filename , json ) => ( cssModules = json ) ,
280
- Loader : createLoader ( asset , resolve ) ,
288
+ Loader : await createLoader ( asset , resolve , options ) ,
281
289
generateScopedName : ( name , filename ) =>
282
290
`${ name } _${ hashString (
283
291
path . relative ( options . projectRoot , filename ) ,
@@ -329,10 +337,15 @@ async function compileCSSModules(asset, env, program, resolve, options) {
329
337
return assets ;
330
338
}
331
339
332
- function createLoader (
340
+ async function createLoader (
333
341
asset : MutableAsset ,
334
342
resolve : ( from : FilePath , to : string ) = > Promise < FilePath > ,
343
+ options : PluginOptions ,
335
344
) {
345
+ let { default : FileSystemLoader } = await options . packageManager . require (
346
+ 'postcss-modules/build/css-loader-core/loader' ,
347
+ asset . filePath ,
348
+ ) ;
336
349
return class ParcelFileSystemLoader extends FileSystemLoader {
337
350
async fetch ( composesPath , relativeTo ) {
338
351
let importPath = composesPath . replace ( / ^ [ " ' ] | [ " ' ] $ / g, '' ) ;
0 commit comments