Я создал базовое 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. но, честно говоря, это немного ошеломляет.