-
Notifications
You must be signed in to change notification settings - Fork 423
/
index.js
59 lines (50 loc) · 1.61 KB
/
index.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const path = require("path");
const { getLoader, loaderNameMatches } = require("react-app-rewired");
function createRewireLess(lessLoaderOptions = {}) {
return function(config, env) {
const lessExtension = /\.less$/;
const fileLoader = getLoader(
config.module.rules,
rule => loaderNameMatches(rule, 'file-loader')
);
fileLoader.exclude.push(lessExtension);
const cssRules = getLoader(
config.module.rules,
rule => String(rule.test) === String(/\.css$/)
);
let lessRules;
if (env === "production") {
lessRules = {
test: lessExtension,
loader: [
// TODO: originally this part is wrapper in extract-text-webpack-plugin
// which we cannot do, so some things like relative publicPath
// will not work.
// https://github.com/timarney/react-app-rewired/issues/33
...cssRules.loader,
{ loader: "less-loader", options: lessLoaderOptions }
]
};
} else {
lessRules = {
test: lessExtension,
use: [
...cssRules.use,
{ loader: "less-loader", options: lessLoaderOptions }
]
};
}
const oneOfRule = config.module.rules.find((rule) => rule.oneOf !== undefined);
if (oneOfRule) {
oneOfRule.oneOf.unshift(lessRules);
}
else {
// Fallback to previous behaviour of adding to the end of the rules list.
config.module.rules.push(lessRules);
}
return config;
};
}
const rewireLess = createRewireLess();
rewireLess.withLoaderOptions = createRewireLess;
module.exports = rewireLess;