-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
webpack.helpers.js
45 lines (36 loc) · 1.33 KB
/
webpack.helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
|--------------------------------------------------------------------------
| Mix Extensions
|--------------------------------------------------------------------------
|
| Adds custom helper functions to the mix object.
|
*/
const { lstatSync, readdirSync } = require('fs');
const { join } = require('path');
const fs = require('fs');
const isDirectory = (source) => lstatSync(source).isDirectory();
const getDirectories = (source) => readdirSync(source).map((name) => join(source, name)).filter(isDirectory);
function makeComponentLessList(source) {
const componentDirs = getDirectories(source);
const result = [];
componentDirs.forEach((dir) => {
const parts = dir.replace(/\\/g, '/').split('/');
const componentName = parts[parts.length - 1];
const lessFile = dir + '/assets/less/' + componentName + '.less';
if (fs.existsSync(lessFile)) {
result.push(componentName);
}
});
return result;
}
// Attach the helpers to the mix object
module.exports = (mix) => {
// Wildcard helper for components
mix.lessList = (path, except = []) => {
makeComponentLessList(path)
.filter(name => !except.includes(name))
.forEach(name => mix.less(`${path}/${name}/assets/less/${name}.less`, `${path}/${name}/assets/css/`))
;
};
};