请在 2024 年 Clojure 状态调查! 分享您的想法。

欢迎!请参阅 关于 页面获取更多关于此如何工作的小信息。

+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”替换,并使用一个更企业化的工厂单例getter初始化。

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

当cljs升级到新的closure库版本时,这将导致使用此版本出错。

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

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闭包依赖,并引入了一个不同的依赖项。我同意你的观点,我相信这一切都有很好的理由。(:感谢你的想法/帮助。
...