如何在 Rollup 摇树的背景下处理副作用?

How to handle side-effects in the context of Rollup tree-shaking?

提问人:Gajus 提问时间:6/27/2023 最后编辑:Gajus 更新时间:6/27/2023 访问量:181

问:

在这里标记了一个副作用:

renderer/Logger.ts (3:7) First side effect in renderer/Logger.ts is at (2:0)
1: import { Roarr } from "roarr";
2: export const Logger = Roarr.child({
   ^
3:   application: "contra-web-app"
4: });

此文件包含在一堆其他文件中。

似乎由于此文件被标识为副作用,因此汇总无法合并依赖于它的其他文件(设置)。experimentalMinChunkSize

在这种情况下,我该怎么办?

Rollup 文档提到了 @__PURE__@__NO_SIDE_EFFECTS__,但文档听起来好像如果我将此代码标记为 ,它将被删除,这不是本意。@__PURE__

这意味着 Rollup 将摇树,即删除调用,除非在某些未摇树的代码中使用返回值。

除非我不明白删除是什么意思,否则我不想删除记录器——我希望记录器继续运行。

许多其他组件都有类似以下内容的文件:

// Button.tsx

import { Logger } from './Logger.ts';

const logger = Logger.child({...});

export default Button = () => {};

这是否意味着我必须转到内部组件功能?logger.child()Button

rollupjs JavaScript的 打包程序 副作用

评论

0赞 Bergi 6/27/2023
如果真的不使用记录器,将其移除对我来说听起来不错?但我不认为这是问题所在,相反,你会希望将(有状态?)记录器的实例化视为副作用。
0赞 Gajus 6/27/2023
使用相同的信息编辑了问题,因为评论中的格式已关闭。
0赞 Bergi 6/27/2023
我不明白为什么它会被删除,因为其他文件确实使用它。
0赞 Gajus 6/27/2023
是的,但最初的问题仍然存在——rollup 将此识别为副作用,并阻止这些组件文件合并到同一个块中。我希望所有这些小组件合并到同一个文件中。
0赞 Bergi 6/27/2023
"它可以防止这些组件文件被合并到同一个块中“ - 否。它可以防止此模块合并到不同的块中。你想要一个记录器实例,而不是多个,对吧?

答: 暂无答案