如何在重新构建应用程序的js目录上添加shadow cljs watcher?

问题描述 投票:0回答:1

我已经使用模板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.,但老实说,这有点让人不知所措。

clojurescript re-frame shadow-cljs
1个回答
0
投票

您可以按照用户指南中的requiring local .js指导进行操作。

基本上,您将.js文件放入与.cljs文件相同的文件夹中,然后只需通过(:require ["./foo.js" :as foo])进行输入即可。不需要其他配置。

© www.soinside.com 2019 - 2024. All rights reserved.