@best-shot/preset-style 0.8.9 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/index.mjs +30 -0
- package/lib/{apply-scss-less.cjs → apply-scss-less.mjs} +3 -5
- package/lib/apply-stylesheet.mjs +102 -0
- package/package.json +14 -14
- package/index.cjs +0 -34
- package/lib/apply-stylesheet.cjs +0 -113
package/README.md
CHANGED
|
@@ -47,8 +47,8 @@ export default {
|
|
|
47
47
|
Use `[name].module.[extname]` as filename.
|
|
48
48
|
|
|
49
49
|
```js
|
|
50
|
-
import { foo } from './foo.module.css';
|
|
51
50
|
import { bar } from './bar.module.scss';
|
|
51
|
+
import { foo } from './foo.module.css';
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
Use CSS Modules in Vue.js. [Learn more](https://vue-loader.vuejs.org/guide/css-modules.html)
|
package/index.mjs
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { relative, resolve } from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
|
|
4
|
+
import { applyScssLess } from './lib/apply-scss-less.mjs';
|
|
5
|
+
import { applyStylesheet } from './lib/apply-stylesheet.mjs';
|
|
6
|
+
|
|
7
|
+
export function apply({ config: { less } }) {
|
|
8
|
+
return async (chain) => {
|
|
9
|
+
const context = chain.get('context');
|
|
10
|
+
|
|
11
|
+
await applyStylesheet(chain);
|
|
12
|
+
|
|
13
|
+
applyScssLess(less)(chain);
|
|
14
|
+
|
|
15
|
+
chain.resolveLoader.modules.prepend(
|
|
16
|
+
relative(
|
|
17
|
+
context,
|
|
18
|
+
resolve(fileURLToPath(import.meta.url), '../node_modules'),
|
|
19
|
+
),
|
|
20
|
+
);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const schema = {
|
|
25
|
+
less: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const name = 'preset-style';
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const extToRegexp = require('ext-to-regexp');
|
|
1
|
+
import extToRegexp from 'ext-to-regexp';
|
|
4
2
|
|
|
5
3
|
function addExtname(rule) {
|
|
6
4
|
const regexp = rule.get('test');
|
|
7
5
|
rule.test(regexp.add('scss', 'sass', 'less'));
|
|
8
6
|
}
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
export function applyScssLess(less) {
|
|
11
9
|
return (chain) => {
|
|
12
10
|
chain.module.rule('style').batch(addExtname);
|
|
13
11
|
|
|
@@ -39,4 +37,4 @@ module.exports = function applyScssLess(less) {
|
|
|
39
37
|
},
|
|
40
38
|
});
|
|
41
39
|
};
|
|
42
|
-
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import extToRegexp from 'ext-to-regexp';
|
|
2
|
+
import slashToRegexp from 'slash-to-regexp';
|
|
3
|
+
|
|
4
|
+
function applyOneOf({ auto = false, mode }) {
|
|
5
|
+
return (rule) => {
|
|
6
|
+
rule
|
|
7
|
+
.use('css-loader')
|
|
8
|
+
.loader('css-loader')
|
|
9
|
+
.options({
|
|
10
|
+
importLoaders: 3,
|
|
11
|
+
modules: {
|
|
12
|
+
...(auto ? { auto } : undefined),
|
|
13
|
+
namedExport: true,
|
|
14
|
+
localIdentName: {
|
|
15
|
+
development: '[path][name]__[local]',
|
|
16
|
+
production: '[local]_[hash:base64:8]',
|
|
17
|
+
}[mode],
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function applyStylesheet(chain) {
|
|
24
|
+
const minimize = chain.optimization.get('minimize');
|
|
25
|
+
|
|
26
|
+
if (minimize) {
|
|
27
|
+
const { default: CssMinimizerPlugin } = await import(
|
|
28
|
+
'css-minimizer-webpack-plugin'
|
|
29
|
+
);
|
|
30
|
+
chain.optimization.minimizer('css-minimizer').use(CssMinimizerPlugin, [
|
|
31
|
+
{
|
|
32
|
+
minimizerOptions: {
|
|
33
|
+
preset: ['default', { discardComments: { removeAll: true } }],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
chain.module.rule('style').test(extToRegexp({ extname: ['css'] }));
|
|
40
|
+
|
|
41
|
+
const mode = chain.get('mode');
|
|
42
|
+
const watch = chain.get('watch');
|
|
43
|
+
|
|
44
|
+
const useHot = chain.devServer.get('hot') || false;
|
|
45
|
+
|
|
46
|
+
const parent = chain.module.rule('style').rule('css');
|
|
47
|
+
|
|
48
|
+
parent
|
|
49
|
+
.oneOf('css-modules-by-query')
|
|
50
|
+
.resourceQuery(/module/)
|
|
51
|
+
.batch(applyOneOf({ mode }));
|
|
52
|
+
|
|
53
|
+
parent
|
|
54
|
+
.oneOf('css-modules-by-filename')
|
|
55
|
+
.batch(applyOneOf({ mode, auto: true }));
|
|
56
|
+
|
|
57
|
+
chain.module
|
|
58
|
+
.rule('style')
|
|
59
|
+
.rule('postcss')
|
|
60
|
+
.use('postcss-loader')
|
|
61
|
+
.loader('postcss-loader')
|
|
62
|
+
.options({
|
|
63
|
+
postcssOptions: {
|
|
64
|
+
plugins: ['postcss-preset-evergreen'],
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const extract = !useHot;
|
|
69
|
+
|
|
70
|
+
if (!watch && chain.module.rules.has('babel')) {
|
|
71
|
+
chain.module
|
|
72
|
+
.rule('babel')
|
|
73
|
+
.exclude.add(slashToRegexp('/node_modules/css-loader/'));
|
|
74
|
+
|
|
75
|
+
if (extract) {
|
|
76
|
+
chain.module
|
|
77
|
+
.rule('babel')
|
|
78
|
+
.exclude.add(slashToRegexp('/node_modules/mini-css-extract-plugin/'));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (extract) {
|
|
83
|
+
const { default: MiniCssExtractPlugin } = await import(
|
|
84
|
+
'mini-css-extract-plugin'
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
chain.module
|
|
88
|
+
.rule('style')
|
|
89
|
+
.use('extract-css')
|
|
90
|
+
.loader(MiniCssExtractPlugin.loader);
|
|
91
|
+
|
|
92
|
+
chain.plugin('extract-css').use(MiniCssExtractPlugin, [
|
|
93
|
+
{
|
|
94
|
+
filename: '[name].css',
|
|
95
|
+
// chunkFilename: '[id].css',
|
|
96
|
+
ignoreOrder: true,
|
|
97
|
+
},
|
|
98
|
+
]);
|
|
99
|
+
} else {
|
|
100
|
+
chain.module.rule('style').use('style-loader').loader('style-loader');
|
|
101
|
+
}
|
|
102
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@best-shot/preset-style",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "A `best-shot` preset for stylesheet",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -32,29 +32,29 @@
|
|
|
32
32
|
"bugs": {
|
|
33
33
|
"url": "https://github.com/best-shot/best-shot/issues"
|
|
34
34
|
},
|
|
35
|
-
"main": "index.
|
|
35
|
+
"main": "index.mjs",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"css-loader": "^6.5.
|
|
38
|
-
"css-minimizer-webpack-plugin": "^3.
|
|
39
|
-
"cssnano": "^5.0.
|
|
37
|
+
"css-loader": "^6.5.1",
|
|
38
|
+
"css-minimizer-webpack-plugin": "^3.2.0",
|
|
39
|
+
"cssnano": "^5.0.13",
|
|
40
40
|
"ext-to-regexp": "^0.1.0",
|
|
41
41
|
"less": "^4.1.2",
|
|
42
42
|
"less-loader": "^10.2.0",
|
|
43
|
-
"mini-css-extract-plugin": "^2.4.
|
|
44
|
-
"postcss": "^8.
|
|
45
|
-
"postcss-loader": "^6.2.
|
|
46
|
-
"postcss-preset-evergreen": "^0.
|
|
43
|
+
"mini-css-extract-plugin": "^2.4.5",
|
|
44
|
+
"postcss": "^8.4.5",
|
|
45
|
+
"postcss-loader": "^6.2.1",
|
|
46
|
+
"postcss-preset-evergreen": "^0.4.0",
|
|
47
47
|
"resolve-url-loader": "^4.0.0",
|
|
48
|
-
"sass": "^1.
|
|
49
|
-
"sass-loader": "^12.
|
|
48
|
+
"sass": "^1.45.0",
|
|
49
|
+
"sass-loader": "^12.4.0",
|
|
50
50
|
"slash-to-regexp": "^0.0.4",
|
|
51
51
|
"style-loader": "^3.3.1"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@best-shot/core": "^0.
|
|
54
|
+
"@best-shot/core": "^0.6.0"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
|
57
|
-
"node": "^
|
|
57
|
+
"node": "^14.17.0 || >=16.13.0"
|
|
58
58
|
},
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public",
|
|
@@ -63,4 +63,4 @@
|
|
|
63
63
|
"x-readme": {
|
|
64
64
|
"logo": "https://cdn.jsdelivr.net/gh/best-shot/best-shot/packages/core/logo.svg"
|
|
65
65
|
}
|
|
66
|
-
}
|
|
66
|
+
}
|
package/index.cjs
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { relative } = require('path');
|
|
4
|
-
|
|
5
|
-
const applyScssLess = require('./lib/apply-scss-less.cjs');
|
|
6
|
-
const applyStylesheet = require('./lib/apply-stylesheet.cjs');
|
|
7
|
-
|
|
8
|
-
exports.apply = function applyStyle({
|
|
9
|
-
config: { less, asset: { esModule = true } = {} },
|
|
10
|
-
}) {
|
|
11
|
-
return (chain) => {
|
|
12
|
-
const context = chain.get('context');
|
|
13
|
-
|
|
14
|
-
chain.batch(applyStylesheet(esModule)).batch(applyScssLess(less));
|
|
15
|
-
|
|
16
|
-
chain.resolveLoader.modules.prepend(relative(context, module.paths[0]));
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
exports.schema = {
|
|
21
|
-
less: {
|
|
22
|
-
type: 'object',
|
|
23
|
-
},
|
|
24
|
-
asset: {
|
|
25
|
-
type: 'object',
|
|
26
|
-
default: {},
|
|
27
|
-
properties: {
|
|
28
|
-
esModule: {
|
|
29
|
-
type: 'boolean',
|
|
30
|
-
default: true,
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
};
|
package/lib/apply-stylesheet.cjs
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
4
|
-
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
|
|
5
|
-
const extToRegexp = require('ext-to-regexp');
|
|
6
|
-
const slashToRegexp = require('slash-to-regexp');
|
|
7
|
-
|
|
8
|
-
function applyOneOf({ auto = false, esModule = true, mode }) {
|
|
9
|
-
return (rule) => {
|
|
10
|
-
rule
|
|
11
|
-
.use('css-loader')
|
|
12
|
-
.loader('css-loader')
|
|
13
|
-
.options({
|
|
14
|
-
...(!esModule ? { esModule: false } : undefined),
|
|
15
|
-
importLoaders: 3,
|
|
16
|
-
modules: {
|
|
17
|
-
...(auto ? { auto } : undefined),
|
|
18
|
-
...(esModule
|
|
19
|
-
? { namedExport: true }
|
|
20
|
-
: { exportLocalsConvention: 'camelCaseOnly' }),
|
|
21
|
-
localIdentName: {
|
|
22
|
-
development: '[path][name]__[local]',
|
|
23
|
-
production: '[local]_[hash:base64:8]',
|
|
24
|
-
}[mode],
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
module.exports = function applyStylesheet(esModule = true) {
|
|
31
|
-
return (chain) => {
|
|
32
|
-
chain.resolve.extensions.add('.css');
|
|
33
|
-
|
|
34
|
-
const minimize = chain.optimization.get('minimize');
|
|
35
|
-
|
|
36
|
-
if (minimize) {
|
|
37
|
-
chain.optimization.minimizer('css-minimizer').use(CssMinimizerPlugin, [
|
|
38
|
-
{
|
|
39
|
-
minimizerOptions: {
|
|
40
|
-
preset: ['default', { discardComments: { removeAll: true } }],
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
]);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
chain.module.rule('style').test(extToRegexp({ extname: ['css'] }));
|
|
47
|
-
|
|
48
|
-
const mode = chain.get('mode');
|
|
49
|
-
const useHot = chain.devServer.get('hot') || false;
|
|
50
|
-
|
|
51
|
-
const parent = chain.module.rule('style').rule('css');
|
|
52
|
-
|
|
53
|
-
parent
|
|
54
|
-
.oneOf('css-modules-by-query')
|
|
55
|
-
.resourceQuery(/module/)
|
|
56
|
-
.batch(applyOneOf({ mode, esModule }));
|
|
57
|
-
|
|
58
|
-
parent
|
|
59
|
-
.oneOf('css-modules-by-filename')
|
|
60
|
-
.batch(applyOneOf({ mode, esModule, auto: true }));
|
|
61
|
-
|
|
62
|
-
chain.module
|
|
63
|
-
.rule('style')
|
|
64
|
-
.rule('postcss')
|
|
65
|
-
.use('postcss-loader')
|
|
66
|
-
.loader('postcss-loader')
|
|
67
|
-
.options({
|
|
68
|
-
postcssOptions: {
|
|
69
|
-
plugins: ['postcss-preset-evergreen'],
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
const extract = !useHot;
|
|
74
|
-
|
|
75
|
-
if (chain.module.rules.has('babel')) {
|
|
76
|
-
chain.module
|
|
77
|
-
.rule('babel')
|
|
78
|
-
.exclude.add(slashToRegexp('/node_modules/css-loader/'))
|
|
79
|
-
.when(extract, (exclude) =>
|
|
80
|
-
exclude.add(slashToRegexp('/node_modules/mini-css-extract-plugin/')),
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (extract) {
|
|
85
|
-
chain.plugin('extract-css').use(MiniCssExtractPlugin, [
|
|
86
|
-
{
|
|
87
|
-
filename: '[name].css',
|
|
88
|
-
// chunkFilename: '[id].css',
|
|
89
|
-
ignoreOrder: true,
|
|
90
|
-
},
|
|
91
|
-
]);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function takeOptions(loader) {
|
|
95
|
-
if (!esModule) {
|
|
96
|
-
loader.options({ esModule: false });
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
chain.module.rule('style').when(
|
|
101
|
-
extract,
|
|
102
|
-
(rule) => {
|
|
103
|
-
rule
|
|
104
|
-
.use('extract-css')
|
|
105
|
-
.loader(MiniCssExtractPlugin.loader)
|
|
106
|
-
.batch(takeOptions);
|
|
107
|
-
},
|
|
108
|
-
(rule) => {
|
|
109
|
-
rule.use('style-loader').loader('style-loader').batch(takeOptions);
|
|
110
|
-
},
|
|
111
|
-
);
|
|
112
|
-
};
|
|
113
|
-
};
|