我已经使用模板lein new re-frame my-proj
创建了一个基本的重新框架应用程序。此特定项目与框架(ecsy)接口,该框架需要一些ES6模块和ES6类,例如,用户生成的代码,而不是从cljs简单地调用。由于Clojurescript当前不是generate ES6 code,因此我在项目中创建了一些包装器ES6模块,计划从中调用cljs代码。
经过大量的研究,我发现没有必要将这些js包装器模块转换为'node_modules'
下成熟的npm模块,但是我可以将它们简单地放在项目的子目录中,例如resources/libs
和然后将此目录添加到:js-options
中的shadow-cljs.edn
:
{:lein true
:nrepl {:port 8777}
:builds {:app {:target :browser
:output-dir "resources/public/js/compiled"
:asset-path "/js/compiled"
:modules {:app {:init-fn re-pure-ecs-simple.core/init
:preloads [devtools.preload]}}
:devtools {:http-root "resources/public"
:http-port 8280}
;;add this
:js-options {:js-package-dirs ["node_modules" "resources/libs"]}}}}
所以现在一切正常,但是唯一的问题是,如果我在'rescources/public'
中编辑任何js文件,则lein.bat dev
编译器不会检测到更改。我可以进入一个对'.cljs'文件的模拟更改,它does导致编译器重新编译,但仍然无法对'.js'文件进行更改(或“ .mjs”文件)。我必须通过ctrl-c杀死编译器,然后重新启动它以传播更改。不幸的是,由于它是完全编译,因此大约需要15秒钟才能编译。
我尝试将'resources/libs'
添加到我的'project.clj'
:
:source-paths ["src/clj" "src/cljs" "resources/libs"]
无济于事。
我还尝试从<my_proj-dir>/resources/public/js/compiled/cljs-runtime
中删除已编译的js文件:
rm 'module$node_modules$systems.js' 'module$node_modules$systems.js.map'
在这种情况下,编译器确实会重新生成文件(在对模拟的.cljs进行更改时),但是它仍然使用以前的版本,例如它必须使用缓存的版本。
有没有一种方法可以将观察者添加到此js目录中,以便进行增量构建?显然,'src / cljs'目录中已经有一个监视程序。我已经咨询了shadow-cljs user gd.,但老实说,这有点让人不知所措。
您可以按照用户指南中的requiring local .js指导进行操作。
基本上,您将.js
文件放入与.cljs
文件相同的文件夹中,然后只需通过(:require ["./foo.js" :as foo])
进行输入即可。不需要其他配置。