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

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

0投票
ClojureScript

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

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

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

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

我不确定这是否是closure compiler的限制或明确不支持,但这确实减少了使用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漏洞引起的,因为这个名字是我们创建的,而需要名称是由Closure提供的。

0投票
...