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

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

0
ClojureScript
在 1.10.x 版本中,我在 {{material-components-web}} 模块的 npm-deps 解析上遇到回归问题。对于子依赖项,它不能正确解析模块路径。当我使用 require 例如 {{@material/snackbar}} 时,会因 {{未捕获错误: 未定义的模块 $$material$base$component 名称ToPath}} 而失败。

重现步骤


yarn add "@cljs-oss/module-deps" "@material/snackbar"

cat <<EOF > deps.edn
{:deps {org.clojure/clojurescript {:mvn/version "1.10.145"}}}
EOF

clj -m cljs.main -d out -e "(require '[\"@material/snackbar\"])"


1.9.946 版本中解决了解析问题

17 答案

0

署名:dnolen

此票务只是需要更多信息。在此报告中的第一步是进行 git bisect。然后需要确定这是否由于 ClojureScript 或 Google Closure 引起的。如果是后者,我们就无能为力了。

0

署名:rarous

我甚至能在 1.10.63 版本中重现这个回归,现在可以缩小窗口。我会在那之后准备向后兼容的重现和 bisect。

0

署名:rarous

bisect 成功,是 #CLJS-2389 (GCC 更新) 引入的问题。

0

署名:rarous

重现代码

0

署名:rarous

当 `head -2 out/node_modules/@material/snackbar/index.js` 以 {{goog.require("module$$material$base$index");}} 结尾时即为损坏的情况。

0

署名:dnolen

我可以重现这个问题,并看到依赖索引文件 cljs_deps.js 看起来不太对,所以它无法正常工作也就不奇怪了。

0

署名:dnolen

进一步挖掘这个问题可能是 Closure 的问题,我们需要等待上游的修复。

0

署名:dnolen

这是一个 Closure Compiler 的问题。我们需要提交一个补丁,并对下一次的 Closure 发布进行必要的更改,这个更改 https://github.com/swannodette/closure-compiler/commit/58012d3f1068aa588a47dc34ec6f39413aa59e62 修复了我遇到的模块名称问题。

0

署名:rarous

太好了,谢谢你David。

0

署名:dnolen

PR Closure Compiler https://github.com/google/closure-compiler/pull/2847

0
by

署名:dnolen

能否将一个非平凡的表达式添加到这个任务项中,使其在 require 后能正常工作?

0
by

署名:dnolen

我搞清楚如何测试这个问题了 - 在 master + 我的 Closure Compiler PR 之后,它确实看起来解决了。

0
by

署名:rarous

很抱歉,我之前没有回复,我昨天参加了编码聚会。这是一个 DOM 组件,所以需要用修改后的 {{index.html}} 在浏览器 REPL 中运行非平凡示例。我认为,如果输出的 {{goog.require}} 是正确的,其他所有内容都将正常运行。非常感谢您的改进。我希望您的 GCC PR 能尽快被接受。{{1.10}} 看起来非常坚固和快速。

0
by

署名:dnolen

Closure Compiler PR 现在有一个测试案例。在它被审查后可能需要做一些小的调整,但希望这个补丁能使得它在最新的 5 月发布中。

0
by

评论者:tkjone

看起来对 google closure 的 PR 已经被审查了 https://github.com/google/closure-compiler/pull/2847

...