-
-
Notifications
You must be signed in to change notification settings - Fork 85
/
genConfig.js
87 lines (80 loc) · 1.83 KB
/
genConfig.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
85
86
87
const path = require('path');
const { packageJson, packagePath } = require('../../util');
const getPlugins = require('./getPlugins');
const nameByFormat = require('./nameByFormat');
const ENV_DEVELOPMENT = 'development';
const ENV_PRODUCTION = 'production';
const FORMAT_UMD = 'umd';
const FORMAT_CJS = 'cjs';
const FORMAT_ES = 'es';
const DIR_ESM = 'esm';
module.exports = function genConfig({
distPath,
libraryName,
packageName = libraryName,
input = 'index.js',
esInput = input,
} = {}) {
return [
{
distPath,
format: FORMAT_ES,
input: esInput,
libraryName,
outputDir: DIR_ESM,
packageName,
},
{ distPath, format: FORMAT_UMD, input, libraryName, packageName },
{ distPath, format: FORMAT_CJS, input, libraryName, packageName },
]
.reduce(
(configs, current) =>
configs.concat(
{ ...current },
{ ...current, dev: true },
{ ...current, min: true }
),
[]
)
.map(buildConfig);
};
function buildConfig({
format,
dev = false,
min = false,
outputDir = '',
distPath,
libraryName,
input,
packageName,
} = {}) {
const { version } = packageJson(packageName);
const PACKAGE_PATH = packagePath(packageName);
const SRC_PATH = path.join(PACKAGE_PATH, 'src');
return {
input: path.join(SRC_PATH, input),
output: {
file: [
path.join(distPath, outputDir, libraryName),
nameByFormat(format),
dev ? ENV_DEVELOPMENT : ENV_PRODUCTION,
min ? 'min' : null,
'js',
]
.filter(Boolean)
.join('.'),
format: format || FORMAT_UMD,
name: libraryName,
...(format === FORMAT_CJS && {
exports: 'default',
}),
},
plugins: getPlugins({
dev,
format,
libraryName,
min,
version,
}),
};
}