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

欢迎!有关此功能的更多信息,请参阅关于页面。

+3
ClojureScript

大家好,
我有一个经过高级优化的使用cljs编写的Firefox插件,提交到插件后,审核告诉我我提交的zip文件与他们从源代码构建的文件不同。

我使用diff-so-fancy来比较生成的js文件,我发现主要区别在于变量名。

那么有什么办法可以确保生成的js是可以重复的?

PS:我的项目源代码在这里
https://github.com/jiacai2050/gooreplacer/blob/firefox/cljs-src/project.clj#L76

1 答案

+1

几年前,我有一个类似的问题(在我这个情况下是为了更好的缓存),那时候的答案至少是“不行”。但你可以尝试以simple优化来构建。它也会做一些重命名,但我认为它是稳定的。如果那样不行,可以试试whitespace

neither `:simple` nor `:whitespace` 也不保证确定性。大部分随机性来自CLJS的`gensym`使用一个不断增长的全球整数。
但`gensym`并不是随机的。那么有没有随机排序呢?它从哪里来?
在多线程构建中(shadow-cljs中的默认设置),编译顺序/时间是非确定性的,因为事物是并行编译的。如果涉及缓存,也可能受到影响,因为这改变了最初要编译的内容。
这意味着在可选的单线程构建中使用(如果可行)以及清除缓存将解决原始问题吗?
我没有检查构建中的所有随机因素,只检查了最明显的几个。所以,可能但没有保证。
...