Skip to content

Commit 64cce93

Browse files
committed
Support for Less and Stylus
1 parent e27aac8 commit 64cce93

File tree

3 files changed

+562
-274
lines changed

3 files changed

+562
-274
lines changed

README.md

Lines changed: 147 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,14 @@
44
<a href="https://www.npmjs.com/package/laravel-mix-vue-css-modules"><img src="https://img.shields.io/npm/v/laravel-mix-vue-css-modules.svg?style=for-the-badge" alt="npm" /></a> <a href="https://www.npmjs.com/package/laravel-mix-vue-css-modules"><img src="https://img.shields.io/npm/dt/laravel-mix-vue-css-modules.svg?style=for-the-badge" alt="npm" /></a>
55
</h1>
66

7-
Add support for css module laravel mix.
7+
Add support for css module laravel mix. **CSS, SCSS, LESS & STYLUS**
88

99
## Installation
1010

1111
```
1212
npm i laravel-mix-vue-css-modules
1313
```
1414

15-
## Update v1 to v2
16-
17-
```
18-
npm install laravel-mix-vue-css-modules@latest
19-
```
20-
2115
## Usage
2216

2317
First, VueCssModules must be enabled. Your `webpack.mix.js` could look like this:
@@ -46,7 +40,7 @@ You can then use it in your templates with a dynamic class binding:
4640

4741
```vue
4842
<template>
49-
<p :class="$style.red">This should be red</p>
43+
<p :class="$style.red">This should be red</p>
5044
</template>
5145
```
5246

@@ -60,24 +54,58 @@ If you only want to use CSS Modules in some of your Vue components, you can set
6054
mix.vueCssModules({ oneOf: true });
6155
```
6256

63-
#### Pre-Processors
57+
#### Custom Injectname
58+
59+
```js
60+
<style module="$cssA">
61+
/* identifiers injected as $cssA */
62+
</style>
63+
64+
<style module="$cssB">
65+
/* identifiers injected as $cssB */
66+
</style>
67+
```
6468

65-
CSS Modules can be used along with other pre-processors. default pre-processor is enable. to disable it set `preProcessor` to `false`
69+
## Pre-Processors
70+
71+
By default all pre-processors are disabled.
72+
73+
#### For Scss
6674

6775
```js
68-
mix.vueCssModules({ preProcessor: false });
76+
mix.vueCssModules({ preProcessor: { scss: true } });
77+
```
78+
79+
#### For Less
80+
81+
`npm i less less-loader --save-dev`
82+
83+
then set `less` to `true`
84+
85+
```js
86+
mix.vueCssModules({ preProcessor: { less: true } });
87+
```
88+
89+
#### For Stylus
90+
91+
`npm i stylus stylus-loader --save-dev`
92+
93+
then set `stylus` to `true`
94+
95+
```js
96+
mix.vueCssModules({ preProcessor: { stylus: true } });
6997
```
7098

7199
#### Custom localIdentName
72100

73101
Default:
74102

75-
- `'[path][name]__[local]` for development
76-
- `'[hash:base64]'` for production
103+
- `[path][name]__[local]` for development
104+
- `[hash:base64]` for production
77105

78106
```js
79107
mix.vueCssModules({
80-
cssLoaderOptions: { localIdentName: "[path][name]__[local]" },
108+
cssLoaderOptions: { localIdentName: "[path][name]__[local]" }
81109
});
82110
```
83111

@@ -103,6 +131,12 @@ Default: `1`
103131
mix.vueCssModules({ cssLoaderOptions: { importLoaders: 2 } });
104132
```
105133

134+
#### Exclude
135+
136+
```js
137+
mix.vueCssModules({ exclude: [path.resolve(__dirname, "node-modules")] });
138+
```
139+
106140
#### Exclude css
107141

108142
you may want some of your css exluded from generated class by css module.
@@ -111,12 +145,104 @@ you may want some of your css exluded from generated class by css module.
111145
const getLocalIdent = require("css-loader/lib/getLocalIdent");
112146

113147
mix.vueCssModules({
114-
cssLoaderOptions: {
115-
getLocalIdent: (context, localIdentName, localName, options) => {
116-
return context.resourcePath.includes("x.scss")
117-
? localName
118-
: getLocalIdent(context, localIdentName, localName, options);
119-
},
120-
},
148+
cssLoaderOptions: {
149+
getLocalIdent: (context, localIdentName, localName, options) => {
150+
return context.resourcePath.includes("x.scss")
151+
? localName
152+
: getLocalIdent(context, localIdentName, localName, options);
153+
}
154+
}
121155
});
122156
```
157+
158+
## Example
159+
160+
```vue
161+
<script>
162+
export default {};
163+
</script>
164+
165+
<template>
166+
<div>
167+
<span class="blue">css scoped</span>
168+
169+
<span :class="$css.blue">css module</span>
170+
171+
<span class="red">scss scoped</span>
172+
173+
<span :class="$scss.red">scss module</span>
174+
175+
<span class="green">less scoped</span>
176+
177+
<span :class="$less.green">less module</span>
178+
179+
<span class="indigo">stylus scoped</span>
180+
181+
<span :class="$stylus.indigo">stylus module</span>
182+
</div>
183+
</template>
184+
185+
<style scoped>
186+
.blue {
187+
color: blue;
188+
}
189+
</style>
190+
191+
<style module="$css">
192+
.blue {
193+
color: blue;
194+
}
195+
</style>
196+
197+
<style lang="scss" scoped>
198+
@mixin my-color($color) {
199+
color: $color;
200+
}
201+
202+
.red {
203+
@include my-color(red);
204+
}
205+
</style>
206+
207+
<style lang="scss" module="$scss">
208+
@mixin my-color($color) {
209+
color: $color;
210+
}
211+
212+
.red {
213+
@include my-color(red);
214+
}
215+
</style>
216+
217+
<style lang="less" scoped>
218+
@color: green;
219+
220+
.green {
221+
color: @color;
222+
}
223+
</style>
224+
225+
<style lang="less" module="$less">
226+
@color: green;
227+
228+
.green {
229+
color: @color;
230+
}
231+
</style>
232+
233+
<style lang="stylus" scoped>
234+
my-color()
235+
color: arguments
236+
237+
.indigo
238+
my-color: indigo
239+
</style>
240+
241+
<style lang="stylus" module="$stylus">
242+
my-color()
243+
color: arguments
244+
245+
.indigo
246+
my-color: indigo
247+
</style>
248+
```

0 commit comments

Comments
 (0)