boot-cljs 和 boot-reload 的用例
编译后,boot-reload 会重新加载更改过的 JS 文件。为了使文件能够按正确顺序重新加载,boot-cljs 使用依赖图对文件进行排序。目前,boot-cljs 直接访问编译器状态,并使用来自 {{:js-dependency-index}} 的数据构建图:[查看代码](https://github.com/adzerk-oss/boot-cljs/blob/0.0-3308/src/adzerk/boot_cljs/impl.clj#L17-L36)
简单解决方案
如果通过 API 暴露命名空间的依赖(requires),那么很容易构建 cljs 命名空间依赖图:[查看代码](https://github.com/adzerk-oss/boot-cljs/blob/d479f10935be321232e2363e2ae3e9cc515a81af/src/adzerk/boot_cljs/impl.clj#L12-L32)
这个解决方案的问题是,{{all-ns}}、{{ns-dependencies}} 或 {{target-file-for-cljs-ns}} 与 foreign-deps 不兼容。虽然 foreign-dep 文件通常不更改且因此不重新加载,但用户在项目中可能使用了 local JS 文件来使用 foreign-deps,而且这些文件可能会更改。
问题、注释和问题
- 应该在 API 中暴露 {{cljs-dependency-graph}},还是只提供 {{ns-dependencies}} 等,让用户自己使用它们创建依赖图?
- {{cljs.build.api/parse-js-ns}} 也可以用来从编译后的 JS 文件中读取提供者(providers)和需要者(requires),但这与 foreign-deps 一样不可行
- 也许Closure库中有某种方式可以按正确顺序重新加载文件?
- 支持 foreign-deps 可能不是必需的,但如果存在很好的方式,那就更好了。