Как добавить shadow cl js watcher в каталог js в приложении для перекадровки? - PullRequest
0 голосов
/ 25 января 2020

Я создал базовое c приложение для перекадровки, используя шаблон lein new re-frame my-proj. Этот конкретный проект взаимодействует с платформой ( ecsy ), которая требует некоторых модулей ES6 и классов ES6, например, кода, который генерируется пользователем, а не просто вызывается из cl js. Поскольку Clojurescript в настоящее время не генерирует код ES6 , я создал несколько модулей-оболочек ES6 в своем проекте, из которых я планирую вызвать код cl js.

После долгих размышлений я обнаружил, что нет необходимости превращать эти js модули-обертки в полноценные npm модули в 'node_modules', но я могу просто поместить их в подкаталог моего проекта, например, 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"]}}}}

Так что теперь все работает нормально, но единственная проблема заключается в том, если я отредактирую любой из js файлы в resources/public' компиляторе lein.bat dev не обнаруживают изменения. Я могу go войти и сделать фиктивное изменение файла '.cl js', который делает , что приводит к перекомпиляции компилятора, но он все равно не воспринимает сделанные изменения в файл. js (или файл .m js). Я должен убить, через Ctrl- c, компилятор и перезапустить его, чтобы распространить изменения. К сожалению, для полной компиляции требуется около 15 секунд.

Я попытался добавить 'resources/libs' к своему 'project.clj':

:source-paths ["src/clj" "src/cljs" "resources/libs"]

, но безрезультатно.

Я также пытался удалить скомпилированные js файлы из <my_proj-dir>/resources/public/js/compiled/cljs-runtime:

rm 'module$node_modules$systems.js' 'module$node_modules$systems.js.map'

В этом случае компилятор заново генерирует файлы (после фиктивного .cl js изменить), но он по-прежнему использует предыдущую версию, например, он должен использовать кэшированную версию.

Есть ли способ добавить наблюдатель в этот каталог js, чтобы я мог выполнять инкрементные сборки? Очевидно, в каталоге 'src / cl js' уже есть наблюдатель. Я проконсультировался с shadow-cl js пользователем gd. но, честно говоря, это немного ошеломляет.

1 Ответ

0 голосов
/ 25 января 2020

Вы можете следовать указаниям для , требующим локального. js в Руководстве пользователя.

В основном вы помещаете файлы .js в ту же папку, что и файл .cljs а затем просто потребовать это через (:require ["./foo.js" :as foo]). Никаких дополнительных настроек не требуется.

...