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

欢迎!有关本服务的工作原理的更多信息,请参阅关于页面。

0
ClojureScript
在 1.10.x 中,我遇到了 npm-deps 解析的回归。对于子依赖项,它无法正确解析模块路径。当我需要 eg. {{@material/snackbar}} 时,它将失败并抛出 {{未捕获错误:模块$$material$base$component 不存在 nameToPath}}。

重现步骤


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

抱歉,我之前没有回应,我昨天有Code Retreat。这是一个DOM组件,所以非平凡的例子需要在修改后的browser REPL中运行{{index.html}}。我认为,如果发出的{{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

...