-
Notifications
You must be signed in to change notification settings - Fork 2
/
rollup.config.js
126 lines (113 loc) · 2.79 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
/* eslint-disable flowtype/require-valid-file-annotation, no-console, import/extensions */
import nodeResolve from 'rollup-plugin-node-resolve';
import replace from 'rollup-plugin-replace';
import commonjs from 'rollup-plugin-commonjs';
import babel from 'rollup-plugin-babel';
import json from 'rollup-plugin-json';
import { terser } from 'rollup-plugin-terser';
import sourceMaps from 'rollup-plugin-sourcemaps';
import pkg from './package.json';
const cjs = {
exports: 'named',
format: 'cjs',
sourcemap: true,
};
const esm = {
format: 'esm',
sourcemap: true,
};
const getCJS = override => ({ ...cjs, ...override });
const getESM = override => ({ ...esm, ...override });
const commonPlugins = [
sourceMaps(),
json(),
nodeResolve({
browser: true,
}),
babel({
babelrc: false,
exclude: 'node_modules/**',
presets: [['@babel/env', { loose: true, modules: false }], '@babel/react'],
plugins: ['@babel/plugin-proposal-class-properties', ['module-resolver', {
root: ['./'],
alias: {
_tests_: './_tests_',
},
}]],
}),
commonjs({
namedExports: {
'react-native': ['NetInfo'],
'react-is': ['isElement', 'isValidElementType', 'ForwardRef'],
},
}),
replace({
__VERSION__: JSON.stringify(pkg.version),
}),
];
const prodPlugins = [
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
terser({
sourcemap: true,
}),
];
const configBase = {
input: './src/index.js',
// \0 is rollup convention for generated in memory modules
external: id => !id.startsWith('\0') && !id.startsWith('.') && !id.startsWith('/'),
plugins: commonPlugins,
};
const globals = {
react: 'React', 'react-native': 'reactNative',
};
const standaloneBaseConfig = {
...configBase,
input: './src/index.js',
output: {
file: 'dist/react-native-hooks-network-status.js',
format: 'umd',
globals,
name: 'react-native-hooks-network-status',
sourcemap: true,
},
plugins: configBase.plugins.concat(
replace({
__SERVER__: JSON.stringify(false),
}),
),
};
const standaloneConfig = {
...standaloneBaseConfig,
plugins: standaloneBaseConfig.plugins.concat(
replace({
'process.env.NODE_ENV': JSON.stringify('development'),
}),
),
};
const standaloneProdConfig = {
...standaloneBaseConfig,
output: {
...standaloneBaseConfig.output,
file: 'dist/react-native-hooks-network-status.min.js',
},
plugins: standaloneBaseConfig.plugins.concat(prodPlugins),
};
const nativeConfig = {
...configBase,
input: './src/index.js',
output: [
getCJS({
file: 'dist/react-native-hooks-network-status.cjs.js',
}),
getESM({
file: 'dist/react-native-hooks-network-status.esm.js',
}),
],
};
export default [
standaloneConfig,
standaloneProdConfig,
nativeConfig,
];