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

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

0
ClojureScript
我在 1.10.x 版本中遇到了 npm-deps 解析的回归。对于子依赖项,它无法正确解析模块路径。当我 require 诸如 {{@material/snackbar}} 之类的模块时,会失败并报错 {{未捕获错误:模块$$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

评论者:dnolen

能否将一个非平凡的公式添加到此票据中,以确保其在require之后可以工作?

0

评论者:dnolen

我找到了测试这个问题的方法——实际上,与master +我的Closure Compiler PR相结合后,这个问题似乎已经解决了。

0

评论者:rarous

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

0

评论者:dnolen

Closure Compiler PR现在有一个测试用例。在审查后可能需要一些小的调整,但希望这个修复能最晚在五月份发布。

0

评论者:tkjone

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

...