汇总 - 防止单个导出发生树摇晃



我正在构建一个使用Rollup预编译的组件库。

我的组件 lib 有数百个文件,深度随机,我需要所有具有特定名称模式 (*.constants.js) 的文件不会被树动摇(遗留向后兼容另一个消耗我正在处理的项目)

我的代码的简化示例

main.js(入口文件)

import { A } from 'foo';
console.log(A)

foo.js

export const A = 1;
export const B = 1;
export const C = 1;

汇总输出/build/foo.js

const A = 1;
export { A };

对我来说非常重要的一件事是保持其他代码库(使用"我的"组件库)的能力,以便能够从特定文件中导入特定内容,例如上面的foo.js示例

问题-
如何防止导出从输出中抖出树形(仅在我的真实场景中*.constants.js)?

>汇总设置:
{
input: 'src/main.js',
output: {
dir: 'build',
format: 'es', // imperative
chunkFileNames: '[name].js',
entryFileNames: '[name].js',
preserveModules: true,  // imperative
preserveModulesRoot: 'src',  // imperative
sourcemap: true,
exports: 'named',
}
}

我最终做了一些丑陋但最小的事情,通过欺骗 rollup 将摇树变量视为使用它们,但将它们转储到全局this变量上,在随机命名空间下:

对于问题中的代码示例,我的组件在内部只使用A,lib,如果我想保留BC的导出,我会这样做:

globalThis.__rollup_no_tree_shaking = {B, C};

最新更新