Skip to content

Commit 17c814d

Browse files
committed
🎉 Initial commit
0 parents  commit 17c814d

File tree

3 files changed

+155
-0
lines changed

3 files changed

+155
-0
lines changed

README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Laravel Mix Vue Css Modules
2+
3+
Add supprt for css module.
4+
5+
## Installation
6+
7+
```
8+
npm install laravel-mix-vue-css-modules --save
9+
```
10+
11+
or
12+
13+
```
14+
yarn add laravel-mix-vue-css-modules
15+
```
16+
17+
## Usage
18+
19+
Your `webpack.mix.js` could look like this:
20+
21+
```js
22+
const mix = require("laravel-mix");
23+
require("laravel-mix-vue-css-modules");
24+
25+
mix.vueCssModules();
26+
```
27+
28+
custom localIdentName
29+
30+
```js
31+
// DEFAULT localIdentName: '[local]_[hash:base64:8]'
32+
mix.vueCssModules({
33+
localIdentName: "[name]__[local]___[hash:base64:5]",
34+
});
35+
```
36+
37+
switch mode
38+
39+
```js
40+
// default global
41+
mix.vueCssModules({ mode: "local" });
42+
```
43+
44+
## Author
45+
46+
Aslam
47+
FullStack Web developer

index.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
const mix = require("laravel-mix");
2+
3+
class VueCssModule {
4+
/**
5+
* Register the component.
6+
*
7+
* When your component is called, all user parameters
8+
* will be passed to this method.
9+
*
10+
* Ex: register(src, output) {}
11+
* Ex: mix.yourPlugin('src/path', 'output/path');
12+
*
13+
* @param {*} ...params
14+
* @return {void}
15+
*
16+
*/
17+
register({
18+
localIdentName = "[local]_[hash:base64:8]",
19+
mode = "global",
20+
} = {}) {
21+
this.localIdentName = localIdentName;
22+
this.mode = mode;
23+
}
24+
25+
/**
26+
* Override the generated webpack configuration.
27+
*
28+
* @param {Object} webpackConfig
29+
* @return {void}
30+
*/
31+
webpackConfig(webpackConfig) {
32+
webpackConfig.module.rules = webpackConfig.module.rules.map((rule) => {
33+
if (!rule.loaders) {
34+
return rule;
35+
}
36+
37+
const loaders = rule.loaders.find(
38+
(loader) => loader.loader === "css-loader"
39+
);
40+
41+
if (loaders != undefined) {
42+
Object.assign(loaders.options, this[this.mode]());
43+
}
44+
45+
return rule;
46+
});
47+
48+
return webpackConfig;
49+
}
50+
51+
/**
52+
* Return default mode
53+
*
54+
* @return {object}
55+
*/
56+
global() {
57+
return {
58+
modules: true,
59+
localIdentName: this.localIdentName,
60+
};
61+
}
62+
63+
/**
64+
* Return local mode
65+
*
66+
* @return {object}
67+
*/
68+
local() {
69+
return {
70+
modules: {
71+
mode: this.mode,
72+
localIdentName: this.localIdentName,
73+
},
74+
};
75+
}
76+
}
77+
78+
mix.extend("vueCssModules", new VueCssModule());

package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "laravel-mix-vue-css-modules",
3+
"version": "1.0.0",
4+
"description": "A Laravel Mix extension for css modules support.",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/Aslam97/laravel-mix-vue-css-modules.git"
12+
},
13+
"keywords": [
14+
"laravel",
15+
"laravel-mix",
16+
"mix",
17+
"webpack",
18+
"vue-css-modules",
19+
"modules"
20+
],
21+
"author": "Aslam",
22+
"license": "MIT",
23+
"bugs": {
24+
"url": "https://github.com/Aslam97/laravel-mix-vue-css-modules/issues"
25+
},
26+
"homepage": "https://github.com/Aslam97/laravel-mix-vue-css-modules#readme",
27+
"peerDependencies": {
28+
"laravel-mix": "^5.0.1"
29+
}
30+
}

0 commit comments

Comments
 (0)