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

欢迎!请查看关于页面以获得更多有关此功能的信息。

+3 投票
ClojureScript

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

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

所以有没有什么方法可以确保生成的js是可重复的?

备注:我的项目源代码在此
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 中默认),因为事物是并行编译的。如果涉及缓存,也可能受到影响,因为这会改变首先编译什么。
这是否意味着使用单线程构建(如果有的话)并清除缓存可以解决 OP 的问题?
我只看构建中的所有明显的随机性,所以可能但也可能不行。
...