-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
rollup.config.js
128 lines (118 loc) · 3.5 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
116
117
118
119
120
121
122
123
124
125
126
127
128
/* eslint-disable flowtype/require-valid-file-annotation */
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import babel from 'rollup-plugin-babel';
import replace from 'rollup-plugin-replace';
import strip from 'rollup-plugin-strip';
import { terser } from 'rollup-plugin-terser';
import { sizeSnapshot } from 'rollup-plugin-size-snapshot';
import json from 'rollup-plugin-json';
import pkg from './package.json';
const input = './src/index.js';
const extensions = ['.js', '.jsx'];
// Treat as externals all not relative and not absolute paths
// e.g. 'react'
const excludeAllExternals = (id) => !id.startsWith('.') && !id.startsWith('/');
const getBabelOptions = ({ useESModules }) => ({
exclude: 'node_modules/**',
runtimeHelpers: true,
plugins: [['@babel/transform-runtime', { useESModules }]],
});
const snapshotArgs =
process.env.SNAPSHOT === 'match'
? {
matchSnapshot: true,
threshold: 1000,
}
: {};
const commonjsArgs = {
include: 'node_modules/**',
// needed for react-is via react-redux
// https://stackoverflow.com/questions/50080893/rollup-error-isvalidelementtype-is-not-exported-by-node-modules-react-is-inde/50098540
namedExports: {
'node_modules/react-is/index.js': [
'isValidElementType',
'isContextConsumer',
],
},
};
export default [
// Universal module definition (UMD) build
// - including console.* statements
// - conditionally used to match snapshot size
{
input,
output: {
file: 'dist/react-beautiful-dnd.js',
format: 'umd',
name: 'ReactBeautifulDnd',
globals: { react: 'React', 'react-dom': 'ReactDOM' },
},
// Only deep dependency required is React
external: ['react', 'react-dom'],
plugins: [
json(),
babel(getBabelOptions({ useESModules: true })),
resolve({ extensions }),
commonjs(commonjsArgs),
replace({ 'process.env.NODE_ENV': JSON.stringify('development') }),
sizeSnapshot(snapshotArgs),
],
},
// Minified UMD build
{
input,
output: {
file: 'dist/react-beautiful-dnd.min.js',
format: 'umd',
name: 'ReactBeautifulDnd',
globals: { react: 'React', 'react-dom': 'ReactDOM' },
},
// Only deep dependency required is React
external: ['react', 'react-dom'],
plugins: [
json(),
babel(getBabelOptions({ useESModules: true })),
resolve({ extensions }),
commonjs(commonjsArgs),
strip(),
replace({ 'process.env.NODE_ENV': JSON.stringify('production') }),
sizeSnapshot(snapshotArgs),
terser(),
// Useful for debugging: you can see what code is dropped
// terser({
// mangle: false,
// compress: false,
// keep_fnames: true,
// output: { beautify: true },
// }),
],
},
// CommonJS (cjs) build
// - Keeping console.log statements
// - All external packages are not bundled
{
input,
output: { file: pkg.main, format: 'cjs' },
external: excludeAllExternals,
plugins: [
json(),
resolve({ extensions }),
babel(getBabelOptions({ useESModules: false })),
],
},
// EcmaScript Module (esm) build
// - Keeping console.log statements
// - All external packages are not bundled
{
input,
output: { file: pkg.module, format: 'esm' },
external: excludeAllExternals,
plugins: [
json(),
resolve({ extensions }),
babel(getBabelOptions({ useESModules: true })),
sizeSnapshot(snapshotArgs),
],
},
];