-
Notifications
You must be signed in to change notification settings - Fork 0
/
rollup.config.js
99 lines (85 loc) · 2.2 KB
/
rollup.config.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
88
89
90
91
92
93
94
95
96
97
98
99
import { readdirSync, statSync, writeFileSync } from 'fs';
import resolve from '@rollup/plugin-node-resolve';
import babel from '@rollup/plugin-babel';
import { terser } from 'rollup-plugin-terser';
import { basename, join } from 'path';
function readModules() {
const ignoreList = [];
const modList = [];
readdirSync('./src').forEach((f) => {
if (!f.endsWith('.js')) return;
if (f.endsWith('.test.js')) return;
const fullname = join(__dirname, 'src', f);
if (statSync(fullname).isDirectory()) return;
const funcName = basename(f, '.js');
if (ignoreList.includes(funcName)) return;
modList.push({
path: fullname,
func: funcName,
});
});
return modList;
}
function createBundle(mod) {
const inputF = mod.path;
const outputF = 'dist/x/' + mod.func;
return {
input: inputF,
output: [
{ file: outputF + '.js', format: 'iife', name: mod.func },
{
file: outputF + '.min.js',
name: mod.func,
format: 'iife',
sourcemap: true,
plugins: [terser()],
},
],
plugins: [resolve(), babel({ babelHelpers: 'bundled' })],
};
}
function generateBundles() {
const entryFile = './index.js';
const modList = readModules();
// generate entry file
let indexJsContent = '// Auto generate by rollup.config.js';
for (const mod of modList) {
indexJsContent += `
export { default as ${mod.func} } from './src/${mod.func}';`;
}
writeFileSync(entryFile, indexJsContent);
const bundles = [
{
input: entryFile,
output: [
{
file: 'dist/bundle.cjs.js',
format: 'cjs',
},
{
file: 'dist/bundle.esm.js',
format: 'esm',
},
{
file: 'dist/bundle.umd.js',
format: 'umd',
name: 'tinykit',
},
{
file: 'dist/bundle.umd.min.js',
sourcemap: true,
format: 'umd',
name: 'tinykit',
plugins: [terser()],
},
],
plugins: [resolve(), babel({ babelHelpers: 'bundled' })],
},
];
for (const mod of modList) {
// @ts-ignore
bundles.push(createBundle(mod));
}
return bundles;
}
export default generateBundles();