-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathrollup.config.mjs
94 lines (88 loc) · 2.14 KB
/
rollup.config.mjs
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
import progress from 'rollup-plugin-progress';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import ts from 'rollup-plugin-ts';
import postcss from 'rollup-plugin-postcss';
import cssImport from 'postcss-import';
import autoprefixer from 'autoprefixer';
import cssnano from 'cssnano';
import pkg from './package.json' assert { type: 'json' };
const typesTsConfig = {
declaration: true,
emitDeclarationOnly: true,
};
const output = {
js: [
{
dir: 'dist/cjs',
format: 'cjs',
preserveModules: true,
sourcemap: true,
interop: 'auto',
},
{
dir: 'dist/esm',
format: 'es',
preserveModules: true,
exports: 'named',
sourcemap: true,
interop: 'auto',
},
],
types: [
{
file: 'dist/tmp/index.js',
format: 'cjs',
interop: 'auto',
},
],
css: [{}],
};
const plugins = (tsConfig, extractCSS) => [
progress(),
nodeResolve(),
commonjs(),
ts({
transpiler: 'babel',
babelConfig: {
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: [
'@babel/plugin-transform-runtime',
['babel-plugin-styled-components', { ssr: true, displayName: false }],
],
},
include: ['**/*.ts', '**/*.tsx'],
transpileOnly: false,
tsconfig: (resolvedConfig) => ({
...resolvedConfig,
...tsConfig,
}),
}),
postcss({
extensions: ['.css', '.scss'],
plugins: [
cssImport(),
autoprefixer(),
cssnano({
preset: ['default', { normalizeWhitespace: false }],
}),
],
inject: false,
extract: !!extractCSS,
}),
];
const bundle = (output, tsConfig, exctractCSS) => ({
input: 'src/index.tsx',
output: output,
plugins: plugins(tsConfig, exctractCSS),
external: [
/@babel\/runtime/,
...(!!pkg.dependencies ? Object.keys(pkg.dependencies) : []),
...(!!pkg.devDependencies ? Object.keys(pkg.devDependencies) : []),
...(!!pkg.peerDependencies ? Object.keys(pkg.peerDependencies) : []),
],
});
export default [
bundle(output['js'], {}, false),
bundle(output['types'], typesTsConfig, true),
];