2024 年 Clojure 调查! 中分享你的想法。

欢迎!有关如何使用本页面,请参阅 关于页面 了解更多信息。

0
ClojureScript
在 1.10.x 版本中,针对 {{material-components-web}} 的 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

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

补丁请求 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

PR至Google Closure已被审查https://github.com/google/closure-compiler/pull/2847

...