Skip to content

Commit 824c235

Browse files
committed
🚀 Add support Pre-Processors
1 parent 16f3513 commit 824c235

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ If you only want to use CSS Modules in some of your Vue components, you can set
5050
mix.vueCssModules({ oneOf: true });
5151
```
5252

53+
#### Pre-Processors
54+
55+
```js
56+
// <style lang="scss" module>
57+
mix.vueCssModules({ sass: true });
58+
```
59+
5360
#### Custom localIdentName
5461

5562
```js

index.js

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ class VueCssModule {
1818
localIdentName = "[local]_[hash:base64:8]",
1919
mode = "global",
2020
oneOf = false,
21+
sass = false,
2122
} = {}) {
2223
this.localIdentName = localIdentName;
2324
this.mode = mode;
2425
this.oneOf = oneOf;
26+
this.sass = sass;
2527
}
2628

2729
/**
@@ -36,11 +38,12 @@ class VueCssModule {
3638
return rule;
3739
}
3840

39-
const loaders = rule.loaders.find(
40-
(loader) => loader.loader === "css-loader"
41+
const sass = rule.loaders.find(
42+
(loader) => loader.loader === "sass-loader"
4143
);
44+
const css = rule.loaders.find((loader) => loader.loader === "css-loader");
4245

43-
if (loaders != undefined) {
46+
if (css != undefined) {
4447
if (this.oneOf) {
4548
const postCssConfig = rule.loaders.find(
4649
(loader) => loader.loader === "postcss-loader"
@@ -66,10 +69,35 @@ class VueCssModule {
6669
],
6770
});
6871
} else {
69-
Object.assign(loaders.options, this[this.mode]());
72+
Object.assign(css.options, this[this.mode]());
7073
}
7174
}
7275

76+
if (
77+
this.sass &&
78+
sass != undefined &&
79+
rule.test.toString() === /\.scss$/.toString()
80+
) {
81+
const postCssLoader = rule.loaders.find(
82+
(l) => l.loader === "postcss-loader"
83+
);
84+
const sassLoader = rule.loaders.find((l) => l.loader === "sass-loader");
85+
delete rule.loaders;
86+
87+
Object.assign(rule, {
88+
test: /\.scss$/,
89+
use: [
90+
"style-loader",
91+
{
92+
loader: "css-loader",
93+
options: this[this.mode](),
94+
},
95+
postCssLoader,
96+
sassLoader,
97+
],
98+
});
99+
}
100+
73101
return rule;
74102
});
75103

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "laravel-mix-vue-css-modules",
3-
"version": "1.0.2",
3+
"version": "1.0.3",
44
"description": "A Laravel Mix extension for css modules support.",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)