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

欢迎!请参阅 关于 页面以获取更多关于该功能的信息。

0
ClojureScript

当 node_modules 中存在循环依赖时,编译器会抱怨缺少依赖项。

原因是 out/cljs_deps.js 中 'goog.addDependency' 语句的顺序。

goog.addDependency("../node_modules/lib1.js", (链接: 'lib1'), (链接: 'lib2')); // 这行将失败,因为 'lib2' 尚未提供
goog.addDependency("../node_modules/lib2.js", (链接: 'lib2'), (链接: 'lib1'));

受影响的 node_modules 示例:apollo-client 1.9.2

我不确定这是否是 Closure 编译器的限制或明确不支持的功能,但这确实减少了可以使用 node_modules 包含的 node 包数量。

当前的解决方案是重写库代码以避免循环依赖,或者切换到 cljsjs。

2 答案

0

评论者:deraen

在最新的 Cljs 变更中测试 Apollo-client 1.9.2 时我没有注意到循环依赖,但有其他奇怪的情况。

`}
// Apollo-client 代码中引用了某些模块的名称不正确
goog.provide("module$home$juho$Source$reagent$test_environments$browser_node$node_modules$apollo_client$transport$networkInterface");
goog.require("module$whatwg_fetch");
goog.require("module$graphql$language$printer");

// 来自 whatwg 文件
goog.provide("module$home$juho$Source$reagent$test_environments$browser_node$node_modules$whatwg_fetch$fetch");
`
}

这可能是由于 Cljs 的 bug 引起的,因为 provide 名称由我们创建,而 require 名称由 Closure 提供。

0
...