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 并发现它是从 #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
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

...