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

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

+1
ClojureScript
编辑

首先,感谢 cljs,它是做前端最好的方式,也是我们企业命脉之一。我们非常感激。


我在一个新的项目中运行一些较旧的代码,该项目的 cljs 依赖项已更新,我现在得到一个有趣的编译警告

WARNING: JavaScript file found on classpath for library `goog.net.cookies`, but does not contain a corresponding `goog.provide` declaration: jar:file:/home/harold/.m2/repository/org/clojure/google-closure-library/0.0-20211011-0726fdeb/google-closure-library-0.0-20211011-0726fdeb.jar!/goog/net/cookies.js

一切似乎都正常运行,但我仍想清理这个输出。

我构建了一个简单的(两个很小的文件)项目来重现这个问题
- https://github.com/harold/cookie-repro
- 您可以克隆它,然后执行

lein cljsprod

我对 Maven 中的 cljs 依赖项进行了“二分法”操作,发现该警告从版本 1.10.891 开始出现
- https://github.com/clojure/clojurescript/blob/master/changes.md#110891
- 在该版本之前,不会看到这个警告


想知道其他人是否见过这个警告,或者类似的警告,以及应该采取哪些步骤(如果有)。

再次感谢您的时间和关注!

2 个答案

+1
 
最佳答案

这根本不是cljs的问题 - 为此造成的混乱道歉。

对于未来的搜索者,这个变化在于 google-closure-library"goog.net.cookies" 已被弃用并移除,转而使用 "goog.net.Cookies",并引入了更加企业化的工厂单例获取器初始化。

链接: https://github.com/google/closure-library/releases/tag/v20220301

当 cljs 升级到新的 closure library 版本时,这种用法将失效。

感谢大家的帮助找到这个问题。

0

你的项目中任何地方有对 google-closure-library 的显式依赖吗?警告中的版本非常古老。找出它的来源并删除显式依赖 - CLJS jar 自身指定了它。

谢谢!我不知道(至少据我所知),这是项目文件(位于问题中链接的仓库):https://github.com/harold/cookie-repro/blob/main/project.clj ... 唯一的依赖项是 clj 和 cljs 的最新版本(警告中看到的版本号 `20211011` 是 cljs 1.11.60 的显式依赖)。
哎,嗯,好的。没想到CLJS的版本这么老,但可能不是什么坏理由。我自己使用shadow-cljs,它使用的是最新的版本之一,我从没在那里见过那个警告。
啊!我没有注意到这个,但你是对的,shadow-cljs排除了cljs closure依赖,而引入了另一个。而且我同意,我相当确信所有这些都有很好的理由。(:感谢你的想法/帮助。
...