-
Notifications
You must be signed in to change notification settings - Fork 0
/
rollup.config.js
115 lines (106 loc) · 2.65 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/***
* @file:
* @author: caojianping
* @Date: 2023-03-29 16:22:58
*/
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import resolve from '@rollup/plugin-node-resolve';
import path from 'path';
import { eslint } from 'rollup-plugin-eslint';
import { terser } from 'rollup-plugin-terser';
import rollupTs from 'rollup-plugin-typescript2';
import pkg from './package.json';
// 名称
const name = pkg.buildOptions.name || 'Cookie';
const fname = name.toLowerCase();
// 横幅标语
const banner = `/*!
* ${pkg.name} v${pkg.version}
* (c) ${new Date().getFullYear()} ${pkg.author}
* @license MIT
*/`;
// 格式化配置
const formatConfig = {
cjs: 'common',
es: 'esm',
'es.browser': 'esm.browser',
umd: 'umd',
};
// 基础配置集合
const baseConfigs = [{ format: 'umd', name }, { format: 'es' }, { format: 'es', browser: true }, { format: 'cjs' }];
// 扩展配置集合
const extendConfigs = (() => {
const result = [];
baseConfigs.forEach((config) => {
const format = formatConfig[config.format + (!!config.browser ? '.browser' : '')];
result.push(
Object.assign({}, config, {
file: resolvePath(`./dist/${fname}.${format}.js`),
// sourcemap: true,
sourcemap: false,
minify: false,
})
);
result.push(
Object.assign({}, config, {
file: resolvePath(`./dist/${fname}.${format}.min.js`),
sourcemap: false,
minify: true,
})
);
});
return result;
})();
/**
* 解析路径
* @param {*} _path 路径
* @returns path
*/
function resolvePath(_path) {
return path.resolve(__dirname, _path);
}
/**
* 创建入口信息
* @param {*} config 配置
* @returns 入口信息
*/
function createEntry(config) {
const entry = {
input: resolvePath('./src/index.ts'),
plugins: [
json(),
resolve({ preferBuiltins: false }),
commonjs(),
eslint({
throwOnError: true,
include: ['src/**/*.ts'],
exclude: ['node_modules/**', 'dist/**'],
}),
rollupTs({
useTsconfigDeclarationDir: true,
tsconfig: resolvePath('./tsconfig.json'),
extensions: ['.js', '.ts', '.tsx'],
}),
],
output: {
banner,
file: config.file,
format: config.format,
sourcemap: config.sourcemap,
},
onwarn: (msg, warn) => {
if (!/Circular/.test(msg)) {
warn(msg);
}
},
};
if (config.format === 'umd') {
entry.output.name = config.name;
}
if (config.minify) {
entry.plugins.push(terser({ module: config.format === 'es' }));
}
return entry;
}
export default extendConfigs.map((config) => createEntry(config));