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

`:simple` 和 `:whitespace` 都不能保证是确定的。大部分随机性都来自于 CLJS `gensym` 使用一个不断增长的全球整数。
但 `gensym` 并不一定随机。是否存在随机排序?它从何而来?
在多线程构建中(shadow-cljs 中的默认设置),编译顺序/时间是非确定的,因为事物是并行编译的。如果涉及到缓存,它也可能受到影响,因为这改变了首先编译的内容。
这意味着使用单线程构建(如果有的话)以及清除缓存就能解决 OP 的问题吗?
我没有查看构建中的所有随机性,只是最明显的一些。所以,可能的,但可能不是。
...