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](https://github.com/adzerk-oss/boot-cljs/blob/0.0-3308/src/adzerk/boot_cljs/impl.clj#L17-L36)
简单解决方案
如果通过API公开命名空间的依赖关系(requires),则可以轻松构建 ClojureScript 命名空间依赖关系图:[https://github.com/adzerk-oss/boot-cljs/blob/d479f10935be321232e2363e2ae3e9cc515a81af/src/adzerk/boot_cljs/impl.clj#L12-L32](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文件通常不会更改并且不需要重新加载,但用户可能在项目中使用 foreign-deps 有本地JS文件,这些文件可能会更改。
问题、注释和问题
- 是否应该在API中公开{{cljs-dependency-graph}},或者只提供{{ns-dependencies}}等用户可以使用以创建依赖关系图的数据是否足够?
- {{cljs.build.api/parse-js-ns}}也可以用于从编译后的JS文件中读取 Provides 和 requires,但这同样不与 foreign-deps 兼容
- 也许在Closure库中有一种方式可以按正确顺序重新加载文件?
- 可能不需要支持 foreign-deps,但是如果有一种好方法,那会很不错。