请你在2024 Clojure调查问卷中分享你的看法!

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

0
ClojureScript
我在1.10.x版本的npm-deps中遇到了回归问题。对于子依赖,它无法正确解析模块路径。当我要导入{{@material/snackbar}}时,将失败并显示错误:{{未定义的模块名称名ToPath: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

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 组件,因此非平凡的示例需要在浏览器 REPL 中运行并修改 {{index.html}}。我认为,如果 emitted {{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

...