2024年Clojure状态调查中分享您的想法!

欢迎!有关如何工作的更多信息,请参阅关于页面。

0投票
ClojureScript

通常很有用,但特别适用于将 clj.loader/set-loaded! 调用追加到用户文件中。

5 个答案

0投票

评论者:thheller

在{{shadow-cljs}}中,我为每个{{:module}}有4个属性用于此。

  • {{:prepend}}被视为文本,例如许可证头。可以包含JavaScript,但不会进行优化。
  • {{:prepend-js}}被视为将通过闭包优化的JavaScript代码
  • {{:append-js}}
  • {{:append}}

我认为保留这4个并区分“文本”和“JavaScript”是有价值的。{{shadow.loader}}完全通过这些属性实现。

0投票

评论者:dnolen

我对这个功能有所顾虑,因为它可能不需要用于CLJS-2157,这就是我最初提出它的原因。

0投票

评论者:thheller

set-loaded!应该在每个模块中只调用一次,因此必须将其追加到模块本身而不是模块中的各个文件中。

通过添加到单个文件中,您最终会多次调用它,因为某些模块有多个入口。根据我的了解,这个调用不是幂等的,可能会导致事件被多次触发。至少,它可能会在模块完全加载数据前调用 set-loaded!,这可能会导致灾难性的结果。

配置选项通常不仅对加载器有用。

0投票

评论者:dnolen

托马斯据我了解,ModuleManager.setLoaded 是幂等的。我在本地测试中并没有遇到任何问题。如果你能提供一个失败案例,我将不胜感激,但我自己找不到。

0投票
参考资料:https://clojure.atlassian.net/browse/CLJS-2156(由 dnolen 报告)
...