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

欢迎!请访问关于页面以了解更多有关该功能的信息。

0
ClojureScript
我在1.10.x版本中遇到了npm-deps解析上的回归。对于子依赖项,它无法正确解析模块路径。当我require @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

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

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

0

评论者:dnolen

能否为这个工单添加一个非平凡的表示式,使其在 require 之后能够正常运行?

0

评论者:dnolen

我想明白了如何测试这个问题 - 它实际上在 master + 我的 Closure Compiler PR 之后已经解决了。

0

评论者:rarous

对不起,我之前没有回复,我昨天有代码 Retreat。这是一个 DOM 组件,所以非平凡示例需要修改 {{index.html}} 在浏览器 REPL 中运行。我认为,如果发出的 {{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

...