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公开命名空间的依赖(需要),则很容易构建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文件中读取提供和需要(需要),但它也不能用于foreign-deps。
- 也许在Closure库中有一种按正确顺序重新加载文件的方式?
- 支持foreign-deps可能不是必须的,但如果有一个好的方法,那就很好了。