请在2024 年 Clojure 调查!(英文)中分享您的想法。

欢迎!请查看关于页面了解此功能的更多信息。

0
ClojureScript
我在 1.10.x 版本中发现 npm-deps 解析的回归问题。对于子依赖项,没有正确解析模块路径。当我尝试使用 例如{{@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 result 是在 #CLJS-2389 (GCC update) 中引入的。

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_编译器的问题。我们需要提交一个补丁,然后在下一个 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

抱歉我之前没有回复,我昨天举行了代码盛会。这是DOM组件,因此非平凡的例子需要在带修改的 {{index.html}} 的浏览器REPL中运行。我想,如果发出的 {{goog.require}} 正确,其他所有内容都将正常工作。非常感谢您的修复。我希望您的GCC PR能尽快被接受。{{1.10}} 看起来非常牢固且快速。

0

评论人:dnolen

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

0

评论者:tkjone

PR已被google closure审查通过https://github.com/google/closure-compiler/pull/2847

...