Quiero configurar el resumen para tomar un montón de archivos en la entrada y producir un montón de archivos en dist que comparten un código común entre ellos.
Aquí está la configuración acumulada que uso:
import path from 'path'; import pathsTransformer from 'ts-transform-paths'; import alias from '@rollup/plugin-alias'; import commonjs from '@rollup/plugin-commonjs'; import { nodeResolve } from '@rollup/plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import peerDepsExternal from 'rollup-plugin-peer-deps-external'; const plugins = [ peerDepsExternal(), alias({ entries: [ { find: '@', replacement: path.join(__dirname, '/src') }, { find: '$root', replacement: __dirname }, ], }), nodeResolve(), typescript({ transformers: [() => pathsTransformer()], }), commonjs({ extensions: ['.js', '.ts'], }), ]; export default [ { input: './src/a.ts', output: { file: 'dist/a.js', format: 'esm', sourcemap: true, }, plugins, }, { input: './src/b.ts', output: { file: 'dist/b.js', format: 'esm', sourcemap: true, }, plugins, }, ]; El problema con esta configuración es que si tanto a.ts como b.ts dependen de algún código, este código común se empaqueta en cada archivo de salida aumentando innecesariamente el tamaño del paquete.
Dado que el formato de esm es output.format (por lo tanto, las import están disponibles en la salida), prefiero esperar que el resumen divida el código compartido entre los 2 archivos en un fragmento separado y luego haga que ambos archivos import ese código común ( que parece ser lo que hace rollup por defecto de todos modos ).
Supongo que el problema está en algún lugar alrededor de las llamadas nodeResolve o commonjs , pero quiero que mis dependencias estén agrupadas. Simplemente no quiero tenerlos duplicados .
¿Cómo optimizo mi producción? Aquí una reproducción para visualizarlo ( dist incluido).
Al devolver una matriz de objetos, especifica al resumen que desea tener paquetes independientes . Si solo desea producir varios archivos (que fue exactamente mi caso), puede especificar input como un objeto.
import path from 'path'; import pathsTransformer from 'ts-transform-paths'; import alias from '@rollup/plugin-alias'; import commonjs from '@rollup/plugin-commonjs'; import { nodeResolve } from '@rollup/plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import peerDepsExternal from 'rollup-plugin-peer-deps-external'; const plugins = [ peerDepsExternal(), alias({ entries: [ { find: '@', replacement: path.join(__dirname, '/src') }, { find: '$root', replacement: __dirname }, ], }), nodeResolve(), typescript({ transformers: [() => pathsTransformer()], }), commonjs({ extensions: ['.js', '.ts'], }), ]; export default { input: { a: './src/a.ts', b: './src/b.ts', }, output: { dir: 'dist', format: 'esm', sourcemap: true, }, plugins, };