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

欢迎!请查看关于页面获取更多关于这一工作的信息。

0
ClojureScript
我在 1.10.x 的/npm-deps 解析中遇到回归。对于子依赖项,它无法正确解析模块路径。当我需要 eg.{{@material/snackbar}}时,会失败,提示“Uncaught Error: Undefined nameToPath for module$$material$base$component”。

复制步骤


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

Bisected 并发现它是从 #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

评论者:dnolen

我们能否在此任务中添加一个非平凡的表达式,以使其在 require 之后能够正常工作?

0

评论者:dnolen

我想出了如何测试这个 - 实际上,它与 master + 我的 Closure Compiler PR 结合后消失了。

0

评论者:rarous

很抱歉我之前没有回复,我昨天参加了 Code Retreat。这是一个 DOM 组件,因此非平凡示例需要在修改后的浏览器 REPL 中运行 {{index.html}}。我认为,如果输出的 {{goog.require}} 正确,其他一切都会好起来。非常感谢您的修复。希望您的 GCC PR 能很快被接受。{{1.10}} 看起来非常稳健和快速。

0

评论者:dnolen

Closure Compiler PR 现在有了一个测试用例。它可能需要在审查后进行一些小调整,但希望这个修复能在最新的 5 月发布中。

0

评论者:tkjone

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

...