-
Notifications
You must be signed in to change notification settings - Fork 0
/
makeBuild.js
84 lines (68 loc) · 1.85 KB
/
makeBuild.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
var _ = require('lodash');
var generators = require('./generators');
var getLoader = generators.getLoader;
var getPlugin = generators.getPlugin;
var getOutput = generators.getOutput;
var getResolver = generators.getResolver;
var getEntry = generators.getEntry;
var getPostCSS = generators.getPostCSS;
function makeBuild(shortBuild) {
return buildObject(shortBuild.name,
shortBuild.watch,
parseWebpackConfig(shortBuild.webpack, shortBuild.name))
}
function buildObject(buildName, watch, webpackConfig) {
return {
watch,
buildName,
webpackConfig,
};
}
function parseWebpackConfig(shortHandConfig, buildName) {
var webpackConfig = {};
Object.keys(shortHandConfig).forEach(function(key) {
var obj = shortHandConfig[key];
if (key === 'loaders') {
_.defaults(webpackConfig, { module: { loaders: [] }});
concatInPlace(
webpackConfig.module.loaders,
obj.map(getLoader)
);
}
if (key === 'plugins') {
webpackConfig.plugins = obj.map(getPlugin);
}
if (key === 'output') {
webpackConfig.output = getOutput(obj);
}
if (key === 'resolve') {
webpackConfig.resolve = getResolver(obj);
}
if (key === 'entry') {
webpackConfig.entry = getEntry(obj, buildName);
}
if (key === 'postcss') {
webpackConfig.postcss = obj.map(getPostCSS);
}
});
return _.extend(webpackConfig, _.omit(shortHandConfig,
Object.keys(webpackConfig).concat('loaders')));
}
function concatInPlace(dest, source) {
source.forEach(function(thing) { dest.push(thing) });
}
function loadNameOrUseSource(thing, load) {
if (typeof thing === 'string') {
return load(thing);
}
return thing;
}
function mapLoadNameOrUseSource(array, loader) {
return array.map(loader);
}
module.exports = {
makeBuild,
buildObject,
parseWebpackConfig,
loadNameOrUseSource,
};