我想将rollup配置为在输入&在dist
中生成一堆在它们之间共享一些公共代码的文件。
下面是我使用的rollup配置:
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,
},
];
这个设置的问题是,如果a.ts
&b.ts
都依赖于一些代码,这些通用代码被捆绑到每个输出文件中,不必要地增加了包的大小。
由于output.format
是esm
(因此,import
s在输出中可用),我宁愿期望rollup将两个文件之间的共享代码拆分为单独的块&然后使两个文件import
的共同代码(这似乎是默认情况下rollup做的事情)。
我认为问题是在nodeResolve
或commonjs
调用的某个地方,但是,我希望我的依赖关系被捆绑。我只是不想让它们重复。
我如何优化我的输出?下面是它的再现(包括dist
)。
通过返回一个对象数组,您可以指定要rollup的独立的包。如果你只是想生成多个文件(这正是我的情况),你可以只指定input
作为一个对象。
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,
};