@@ -42,7 +42,7 @@ Then add the loader to your Webpack configuration. For example:
42
42
** app.js**
43
43
44
44
``` js
45
- import ' ./style.scss' ;
45
+ import " ./style.scss" ;
46
46
```
47
47
48
48
** style.scss**
@@ -65,11 +65,11 @@ module.exports = {
65
65
test: / \. s[ac] ss$ / i ,
66
66
use: [
67
67
// Creates `style` nodes from JS strings
68
- ' style-loader' ,
68
+ " style-loader" ,
69
69
// Translates CSS into CommonJS
70
- ' css-loader' ,
70
+ " css-loader" ,
71
71
// Compiles Sass to CSS
72
- ' sass-loader' ,
72
+ " sass-loader" ,
73
73
],
74
74
},
75
75
],
@@ -86,7 +86,7 @@ Webpack provides an [advanced mechanism to resolve files](https://webpack.js.org
86
86
The ` sass-loader ` uses Sass's custom importer feature to pass all queries to the Webpack resolving engine. Thus you can import your Sass modules from ` node_modules ` . Just prepend them with a ` ~ ` to tell Webpack that this is not a relative import:
87
87
88
88
``` scss
89
- @import ' ~bootstrap' ;
89
+ @import " ~bootstrap" ;
90
90
```
91
91
92
92
It's important to only prepend it with ` ~ ` , because ` ~/ ` resolves to the home directory.
@@ -167,13 +167,13 @@ module.exports = {
167
167
{
168
168
test: / \. s[ac] ss$ / i ,
169
169
use: [
170
- ' style-loader' ,
171
- ' css-loader' ,
170
+ " style-loader" ,
171
+ " css-loader" ,
172
172
{
173
- loader: ' sass-loader' ,
173
+ loader: " sass-loader" ,
174
174
options: {
175
175
// Prefer `dart-sass`
176
- implementation: require (' sass' ),
176
+ implementation: require (" sass" ),
177
177
},
178
178
},
179
179
],
@@ -211,12 +211,12 @@ module.exports = {
211
211
{
212
212
test: / \. s[ac] ss$ / i ,
213
213
use: [
214
- ' style-loader' ,
215
- ' css-loader' ,
214
+ " style-loader" ,
215
+ " css-loader" ,
216
216
{
217
- loader: ' sass-loader' ,
217
+ loader: " sass-loader" ,
218
218
options: {
219
- implementation: require (' sass' ),
219
+ implementation: require (" sass" ),
220
220
sassOptions: {
221
221
fiber: false ,
222
222
},
@@ -240,14 +240,14 @@ module.exports = {
240
240
{
241
241
test: / \. s[ac] ss$ / i ,
242
242
use: [
243
- ' style-loader' ,
244
- ' css-loader' ,
243
+ " style-loader" ,
244
+ " css-loader" ,
245
245
{
246
- loader: ' sass-loader' ,
246
+ loader: " sass-loader" ,
247
247
options: {
248
- implementation: require (' sass' ),
248
+ implementation: require (" sass" ),
249
249
sassOptions: {
250
- fiber: require (' fibers' ),
250
+ fiber: require (" fibers" ),
251
251
},
252
252
},
253
253
},
@@ -293,14 +293,14 @@ module.exports = {
293
293
{
294
294
test: / \. s[ac] ss$ / i ,
295
295
use: [
296
- ' style-loader' ,
297
- ' css-loader' ,
296
+ " style-loader" ,
297
+ " css-loader" ,
298
298
{
299
- loader: ' sass-loader' ,
299
+ loader: " sass-loader" ,
300
300
options: {
301
301
sassOptions: {
302
302
indentWidth: 4 ,
303
- includePaths: [' absolute/path/a' , ' absolute/path/b' ],
303
+ includePaths: [" absolute/path/a" , " absolute/path/b" ],
304
304
},
305
305
},
306
306
},
@@ -322,24 +322,24 @@ module.exports = {
322
322
{
323
323
test: / \. s[ac] ss$ / i ,
324
324
use: [
325
- ' style-loader' ,
326
- ' css-loader' ,
325
+ " style-loader" ,
326
+ " css-loader" ,
327
327
{
328
- loader: ' sass-loader' ,
328
+ loader: " sass-loader" ,
329
329
options: {
330
330
sassOptions : (loaderContext ) => {
331
331
// More information about available properties https://webpack.js.org/api/loaders/
332
332
const { resourcePath , rootContext } = loaderContext;
333
333
const relativePath = path .relative (rootContext, resourcePath);
334
334
335
- if (relativePath === ' styles/foo.scss' ) {
335
+ if (relativePath === " styles/foo.scss" ) {
336
336
return {
337
- includePaths: [' absolute/path/c' , ' absolute/path/d' ],
337
+ includePaths: [" absolute/path/c" , " absolute/path/d" ],
338
338
};
339
339
}
340
340
341
341
return {
342
- includePaths: [' absolute/path/a' , ' absolute/path/b' ],
342
+ includePaths: [" absolute/path/a" , " absolute/path/b" ],
343
343
};
344
344
},
345
345
},
@@ -372,15 +372,15 @@ module.exports = {
372
372
{
373
373
test: / \. s[ac] ss$ / i ,
374
374
use: [
375
- ' style-loader' ,
375
+ " style-loader" ,
376
376
{
377
- loader: ' css-loader' ,
377
+ loader: " css-loader" ,
378
378
options: {
379
379
sourceMap: true ,
380
380
},
381
381
},
382
382
{
383
- loader: ' sass-loader' ,
383
+ loader: " sass-loader" ,
384
384
options: {
385
385
sourceMap: true ,
386
386
},
@@ -405,14 +405,14 @@ module.exports = {
405
405
{
406
406
test: / \. s[ac] ss$ / i ,
407
407
use: [
408
- ' style-loader' ,
409
- ' css-loader' ,
408
+ " style-loader" ,
409
+ " css-loader" ,
410
410
{
411
- loader: ' sass-loader' ,
411
+ loader: " sass-loader" ,
412
412
options: {
413
413
sourceMap: true ,
414
414
sassOptions: {
415
- outputStyle: ' compressed' ,
415
+ outputStyle: " compressed" ,
416
416
},
417
417
},
418
418
},
@@ -442,12 +442,12 @@ module.exports = {
442
442
{
443
443
test: / \. s[ac] ss$ / i ,
444
444
use: [
445
- ' style-loader' ,
446
- ' css-loader' ,
445
+ " style-loader" ,
446
+ " css-loader" ,
447
447
{
448
- loader: ' sass-loader' ,
448
+ loader: " sass-loader" ,
449
449
options: {
450
- additionalData: ' $env: ' + process .env .NODE_ENV + ' ; ' ,
450
+ additionalData: " $env: " + process .env .NODE_ENV + " ; " ,
451
451
},
452
452
},
453
453
],
@@ -459,28 +459,64 @@ module.exports = {
459
459
460
460
#### ` Function `
461
461
462
+ ##### Sync
463
+
462
464
``` js
463
465
module .exports = {
464
466
module: {
465
467
rules: [
466
468
{
467
469
test: / \. s[ac] ss$ / i ,
468
470
use: [
469
- ' style-loader' ,
470
- ' css-loader' ,
471
+ " style-loader" ,
472
+ " css-loader" ,
471
473
{
472
- loader: ' sass-loader' ,
474
+ loader: " sass-loader" ,
473
475
options: {
474
476
additionalData : (content , loaderContext ) => {
475
477
// More information about available properties https://webpack.js.org/api/loaders/
476
478
const { resourcePath , rootContext } = loaderContext;
477
479
const relativePath = path .relative (rootContext, resourcePath);
478
480
479
- if (relativePath === ' styles/foo.scss' ) {
480
- return ' $value: 100px;' + content;
481
+ if (relativePath === " styles/foo.scss" ) {
482
+ return " $value: 100px;" + content;
483
+ }
484
+
485
+ return " $value: 200px;" + content;
486
+ },
487
+ },
488
+ },
489
+ ],
490
+ },
491
+ ],
492
+ },
493
+ };
494
+ ```
495
+
496
+ ##### Async
497
+
498
+ ``` js
499
+ module .exports = {
500
+ module: {
501
+ rules: [
502
+ {
503
+ test: / \. s[ac] ss$ / i ,
504
+ use: [
505
+ " style-loader" ,
506
+ " css-loader" ,
507
+ {
508
+ loader: " sass-loader" ,
509
+ options: {
510
+ additionalData: async (content , loaderContext ) => {
511
+ // More information about available properties https://webpack.js.org/api/loaders/
512
+ const { resourcePath , rootContext } = loaderContext;
513
+ const relativePath = path .relative (rootContext, resourcePath);
514
+
515
+ if (relativePath === " styles/foo.scss" ) {
516
+ return " $value: 100px;" + content;
481
517
}
482
518
483
- return ' $value: 200px;' + content;
519
+ return " $value: 200px;" + content;
484
520
},
485
521
},
486
522
},
@@ -510,10 +546,10 @@ module.exports = {
510
546
{
511
547
test: / \. s[ac] ss$ / i ,
512
548
use: [
513
- ' style-loader' ,
514
- ' css-loader' ,
549
+ " style-loader" ,
550
+ " css-loader" ,
515
551
{
516
- loader: ' sass-loader' ,
552
+ loader: " sass-loader" ,
517
553
options: {
518
554
webpackImporter: false ,
519
555
},
@@ -539,7 +575,7 @@ There are two possibilities to extract a style sheet from the bundle:
539
575
** webpack.config.js**
540
576
541
577
``` js
542
- const MiniCssExtractPlugin = require (' mini-css-extract-plugin' );
578
+ const MiniCssExtractPlugin = require (" mini-css-extract-plugin" );
543
579
544
580
module .exports = {
545
581
module: {
@@ -548,11 +584,11 @@ module.exports = {
548
584
test: / \. s[ac] ss$ / i ,
549
585
use: [
550
586
// fallback to style-loader in development
551
- process .env .NODE_ENV !== ' production'
552
- ? ' style-loader'
587
+ process .env .NODE_ENV !== " production"
588
+ ? " style-loader"
553
589
: MiniCssExtractPlugin .loader ,
554
- ' css-loader' ,
555
- ' sass-loader' ,
590
+ " css-loader" ,
591
+ " sass-loader" ,
556
592
],
557
593
},
558
594
],
@@ -561,8 +597,8 @@ module.exports = {
561
597
new MiniCssExtractPlugin ({
562
598
// Options similar to the same options in webpackOptions.output
563
599
// both options are optional
564
- filename: ' [name].css' ,
565
- chunkFilename: ' [id].css' ,
600
+ filename: " [name].css" ,
601
+ chunkFilename: " [id].css" ,
566
602
}),
567
603
],
568
604
};
@@ -578,21 +614,21 @@ To enable CSS source maps, you'll need to pass the `sourceMap` option to the `sa
578
614
579
615
``` javascript
580
616
module .exports = {
581
- devtool: ' source-map' , // any "source-map"-like devtool is possible
617
+ devtool: " source-map" , // any "source-map"-like devtool is possible
582
618
module: {
583
619
rules: [
584
620
{
585
621
test: / \. s[ac] ss$ / i ,
586
622
use: [
587
- ' style-loader' ,
623
+ " style-loader" ,
588
624
{
589
- loader: ' css-loader' ,
625
+ loader: " css-loader" ,
590
626
options: {
591
627
sourceMap: true ,
592
628
},
593
629
},
594
630
{
595
- loader: ' sass-loader' ,
631
+ loader: " sass-loader" ,
596
632
options: {
597
633
sourceMap: true ,
598
634
},
0 commit comments