_由deraen做出的评论_
我会在其中添加对{{cljs.compiler.api}}的调用,并可以称为{{output-dependency-graph}}。
创建图需要所有节点及其每个节点的依赖项列表。对于Cljs命名空间
这些数据可以通过 {{all-ns}} 和 ns 分析图 {{:requires}} 进行访问。关于 foreign-deps 的数据
以及闭包库在编译状态下的 {{:js-dependency-index}} 键中可用。要创建图形,我们需要
1. 获取所有节点的列表
2. 获取给定节点的依赖关系
3. 获取给定节点的输出文件
因为步骤 2 和 3 依赖于节点的类型,因此最好在步骤 1 中收集这些值。因此,步骤 1 将执行如下操作
{{(get-nodes ...) => [{:provides "goog.net" :file "out/goog/net.js" :dependencies #{"goog.foo"}} {:provides "frontend.core" :file "out/frontend/core.js" :dependencies #{"cljs.core"}}]}}
这可以通过将来自 {{all-ns}} 等的 cljs 命名空间检索到的数据与 {{:js-dependency-index}} 中的数据连接来实现。下一个和最后一个步骤将是使用 reduce 构建图。
使用这种实现,将只有一个新的 API 调用:{{output-dependency-graph}}。
我在思考使用 {{all-ns}}、{{find-ns}} 等 {{:requires}} 版本的替代方法,该方法也适用于 foreign-deps 和闭包库,但我认为它可能并不容易(或高效),例如仅使用名称检索 foreign-dep 的数据,因为它们按文件路径索引。
回答 by jira
Comment made by: dnolen
现在随着 CLJS-1437 的合并,需要哪些步骤来完成这个任务?