我正在构建一个使用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,如果我想保留B
和C
的导出,我会这样做:
globalThis.__rollup_no_tree_shaking = {B, C};