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

欢迎!有关此功能的工作方式,请参阅关于页面以获取更多信息。

0投票
ClojureScript
我在1.10.x版本中遇到了npm-deps解析的回归。对于子依赖关系,它无法正确解析模块路径。当我想导入如{{@material/snackbar}}时,会报错{{未找到模块 nameToPath: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 发布

在#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 发布

我想出了如何测试这个问题——实际上,在主分支加上我的 Closure Compiler PR 后,确实看起来已经解决了。

0投票
by

评论由:rarous 发布

抱歉,我之前没有回复,因为我昨天参加了 Code Retreat。这是一个 DOM 组件,所以非平凡示例需要在浏览器 REPL 中运行,并对 {{index.html}} 进行修改。我认为,如果 emitted {{goog.require}} 是正确的,其他所有内容都将正常运行。非常感谢您提供的修复方案。希望您的 GCC PR 早日被接受。{{1.10}} 看起来非常稳定且快速。

0投票
by

评论由:dnolen 发布

Closure Compiler PR 现在有了一个测试用例。在审查后可能需要一些小的调整,但希望这个修复能够在最迟五月份的版本中包含。

0投票
by

评论者:tkjone

看起来 google closure 的 PR 已经过审阅 https://github.com/google/closure-compiler/pull/2847

...