Skip to content

Commit c93cec3

Browse files
feat: use single rollup config with multiple outputs
1 parent 3bfcd59 commit c93cec3

File tree

2 files changed

+65
-44
lines changed

2 files changed

+65
-44
lines changed

charts/legend/rollup.config.mjs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
1-
import defaultConfig, {
2-
esmConfig,
3-
umdConfig,
1+
import {
2+
storiesConfig,
3+
modernDevProdConfig,
44
} from '@lg-tools/build/config/rollup.config.mjs';
55

6-
const esmConstantsConfig = {
7-
...esmConfig,
8-
// remove terser plugin
9-
plugins: [...esmConfig.plugins.filter(plugin => plugin.name !== 'terser')],
10-
};
11-
const umdConstantsConfig = {
12-
...umdConfig,
13-
// remove terser plugin
14-
plugins: [...umdConfig.plugins.filter(plugin => plugin.name !== 'terser')],
15-
};
16-
17-
export default [...defaultConfig, esmConstantsConfig, umdConstantsConfig];
6+
export default [storiesConfig, modernDevProdConfig];

tools/build/config/rollup.config.mjs

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,40 +36,49 @@ const moduleFormatToDirectory = {
3636
const doTestUtilsExist = glob.sync(testUtilsFilename).length > 0;
3737

3838
/**
39-
*
40-
* @param {'esm' | 'umd'} format
41-
* @param {*} overrides
42-
* @returns
39+
* @param {{ format: import('rollup').OutputOptions['format'], useTerser?: boolean, outputNameSuffix?: string }} options
40+
* @returns {import('rollup').OutputOptions}
4341
*/
44-
const createConfigForFormat = (format, overrides) => {
42+
const createOutput = ({ format, useTerser = false, outputNameSuffix = '' }) => {
43+
return {
44+
dir: moduleFormatToDirectory[format],
45+
name,
46+
format,
47+
sourcemap: true,
48+
globals: format === 'umd' ? getUMDGlobals() : {},
49+
validate: true,
50+
interop: 'compat', // https://rollupjs.org/configuration-options/#output-interop
51+
entryFileNames: `[name]${outputNameSuffix}.js`,
52+
plugins: useTerser ? [terser()] : [],
53+
};
54+
};
55+
56+
/**
57+
* @param {import('rollup').OutputOptions} output
58+
* @param {Partial<import('rollup').RollupOptions>} [overrides]
59+
* @returns {import('rollup').RollupOptions}
60+
*/
61+
const createConfigForFormat = (output, overrides = {}) => {
62+
/** @type {import('@rollup/plugin-babel').RollupBabelInputPluginOptions} */
63+
const babelOptions = {
64+
babelrc: false,
65+
babelHelpers: 'bundled',
66+
extensions,
67+
configFile: babelConfigPath,
68+
sourceMaps: true,
69+
envName: 'production',
70+
};
71+
72+
/** @type {import('rollup').RollupOptions} */
4573
const formatConfig = {
4674
input: ['src/index.ts'],
47-
output: {
48-
dir: moduleFormatToDirectory[format],
49-
name,
50-
format,
51-
sourcemap: true,
52-
globals: format === 'umd' ? getUMDGlobals() : {},
53-
validate: true,
54-
interop: 'compat', // https://rollupjs.org/configuration-options/#output-interop
55-
},
75+
output,
5676
plugins: [
5777
nodePolyfills(),
5878
nodeExternals({ deps: true }),
5979
nodeResolve({ extensions }),
60-
61-
babel({
62-
babelrc: false,
63-
babelHelpers: 'bundled',
64-
extensions,
65-
configFile: babelConfigPath,
66-
sourceMaps: true,
67-
envName: 'production',
68-
}),
69-
80+
babel(babelConfig),
7081
svgr(),
71-
72-
terser(),
7382
],
7483
external,
7584
strictDeprecations: true,
@@ -83,11 +92,32 @@ const createConfigForFormat = (format, overrides) => {
8392
return finalConfig;
8493
};
8594

86-
const esmConfig = createConfigForFormat('esm');
87-
const umdConfig = createConfigForFormat('umd');
95+
const esmConfig = createConfigForFormat(
96+
createOutput({ format: 'esm', useTerser: true }),
97+
);
98+
const umdConfig = createConfigForFormat(
99+
createOutput({ format: 'umd', useTerser: true }),
100+
);
88101

89102
const defaultConfig = [esmConfig, umdConfig];
90103

104+
// configurations for modern dev/prod bundle publishing
105+
// to be used by packages that are included in the experiment
106+
const modernDevProdConfig = createConfigForFormat([
107+
createOutput({ format: 'esm' }),
108+
createOutput({ format: 'umd' }),
109+
createOutput({
110+
format: 'esm',
111+
useTerser: true,
112+
outputNameSuffix: '-min',
113+
}),
114+
createOutput({
115+
format: 'umd',
116+
useTerser: true,
117+
outputNameSuffix: '-min',
118+
}),
119+
]);
120+
91121
// Add additional entry point to UMD build for test-utils if they exist
92122
doTestUtilsExist &&
93123
defaultConfig.push(
@@ -108,6 +138,8 @@ doTestUtilsExist &&
108138
// FIXME: Figure out a way to get rid of this.
109139
// Creates a super-hacky `stories` bundle
110140
const storiesExist = glob.sync(storyGlob).length > 0;
141+
142+
/** @type {import('rollup').RollupOptions} */
111143
const storiesConfig = {
112144
...esmConfig,
113145
input: glob.sync(storyGlob)[0],
@@ -121,6 +153,6 @@ const storiesConfig = {
121153

122154
storiesExist && defaultConfig.push(storiesConfig);
123155

124-
export { esmConfig, storiesConfig, umdConfig };
156+
export { modernDevProdConfig, esmConfig, storiesConfig, umdConfig };
125157

126158
export default defaultConfig;

0 commit comments

Comments
 (0)