Попытка использовать re-frame-10x (был re-frame-trace) с проектом descjop (электрон)

Я пытаюсь создать проект, используя комбинацию re-frame и electronic, и мне бы хотелось установить re-frame-10x, чтобы я мог легко просматривать определенные части app-db. Я использовал его раньше с обычным проектом clojurescript / re-frame, доступным через google chrome, но еще не использующим электрон. Я надеюсь, так как я считаю, что электрон использует в основном тот же код, что и хром под капотом.

Я выполнил инструкции по установке на странице github re-frame-10x, и вроде все в порядке. Однако я не могу вызвать окно 10x.

Это часть моего файла project.clj, в частности, сборки разработчика clojurescript:

  :cljsbuild
  {:builds
   {:dev-main {:source-paths ["src"]
               :incremental true
               :jar true
               :assert true
               :compiler {:output-to "app/dev/js/cljsbuild-main.js"
                          :externs ["app/dev/js/externs.js"
                                    "node_modules/closurecompiler-externs/path.js"
                                    "node_modules/closurecompiler-externs/process.js"]
                          :warnings true
                          :elide-asserts true
                          :target :nodejs
                          :output-dir "app/dev/js/out_main"
                          :optimizations :simple
                          :pretty-print true
                          :output-wrapper true
                          :closure-defines      {"re_frame.trace.trace_enabled_QMARK_" true}
                          :preloads             [day8.re-frame-10x.preload]
                          :main "anh.core" }}

    :dev-front {:source-paths ["src_front" "src_front_profile/anh_front/dev"]
                :incremental true
                :jar true
                :assert true
                :compiler {:output-to "app/dev/js/front.js"
                           :externs ["app/dev/js/externs_front.js"]
                           :warnings true
                           :elide-asserts true
                           :optimizations :none
                           :output-dir "app/dev/js/out_front"
                           :pretty-print true
                           :output-wrapper true }}

Обратите внимание, что есть 2 сборки. (figwheel-status) сообщает мне, что он наблюдает и перекомпилирует dev-front. dev-main содержит указатель на main, который нужен re-frame-10x.

Clojurescript был обновлен до последней версии «1.10.64», и все выглядит нормально, никаких сообщений об ошибках при запуске repl (с использованием вставки из emacs) или при запуске реплика clojurescript.

До сих пор нет никаких признаков окна re-frame-10x. Он должен появиться, когда я нажимаю ctrl-h в окне приложения.

Под этой линией находятся вещи, которые я пробовал на этом пути. Наверное, не имеет значения.


Прокручивая назад сообщения clojure repl, я вижу, что возникла какая-то проблема с re-frame-10x во время запуска cljs repl:

user> Figwheel: Starting server at http://0.0.0.0:3441
Figwheel: Watching build - dev-front
Figwheel: Cleaning build - dev-front
Compiling "app/dev/js/front.js" from ["src_front" "src_front_profile/anh_front/dev"]...
Failed to compile "app/dev/js/front.js" in 10.853 seconds.
----  Could not Analyze  app/dev/js/out_front/day8/re_frame_10x/subs.cljs  ----

  No such namespace: cljs.spec.alpha, could not locate cljs/spec/alpha.cljs, cljs/spec/alpha.cljc, or Closure namespace "cljs.spec.alpha"

----  Analysis Error : Please see app/dev/js/out_front/day8/re_frame_10x/subs.cljs  ----
Launching ClojureScript REPL for build: dev-front

Есть идеи, что это значит? Я не использую cljs.spec (пока), но похоже, что компилятор его ищет.

Это раздел файла project.clj с изменениями, запрошенными re-frame-10x, в частности, определение закрытия, предварительная загрузка и ссылка на main в разделе компилятора соответствующего раздела cljsbuild:

:dev-front {:source-paths ["src_front" "src_front_profile/anh_front/dev"]
            :incremental true
            :jar true
            :assert true
            :compiler {:output-to "app/dev/js/front.js"
                       :externs ["app/dev/js/externs_front.js"]
                       :warnings true
                       :elide-asserts true

                       :optimizations :none
                       :output-dir "app/dev/js/out_front"

                       :pretty-print true
                       :output-wrapper true
                       :closure-defines      {"re_frame.trace.trace_enabled_QMARK_" true}
                       :preloads             [day8.re-frame-10x.preload]
                       :main "anh.core"
                       }}

Обновлять:

это помогло: Нет такого пространства имен: clojure.spec.alpha в настройке проекта clojurescript Следуя предложению, я обновил clojurescript до последней версии, в которой есть все необходимые спецификации, и при запуске cljs repl показывает другую ошибку:

Failed to load resource: net::ERR_FILE_NOT_FOUND
cljs_deps.js Failed to load resource: net::ERR_FILE_NOT_FOUND
base.js:677 goog.require could not find: day8.re_frame_10x.preload
goog.logToConsole_ @ base.js:677
base.js:711 Uncaught Error: goog.require could not find: day8.re_frame_10x.preload
    at Object.goog.require (base.js:711)
    at index.html:11
base.js:677 goog.require could not find: anh.core
goog.logToConsole_ @ base.js:677
base.js:711 Uncaught Error: goog.require could not find: anh.core
    at Object.goog.require (base.js:711)
    at index.html:11
base.js:677 goog.require could not find: anh_front.init
goog.logToConsole_ @ base.js:677
base.js:711 Uncaught Error: goog.require could not find: anh_front.init
    at Object.goog.require (base.js:711)
    at index.html:12

Это просто основная функция, которую не найти. В файле project.clj указаны 2 сборки для разработчиков: dev-front и dev-main. Параметры компилятора clojurescript были указаны не в том разделе. Перемещение их в правильный раздел избавляет от ошибок, но окно re-frame-10x по-прежнему не появляется, когда я нажимаю ctrl-h.


person Iain    schedule 28.02.2018    source источник


Ответы (1)


Ключом к исправлению этого было размещение его в правильной сборке. Descjop имеет 2 сборки для разработчиков, одну для самого приложения (dev-main) и одну для окна ( dev-front). Dev-main можно и, вероятно, нужно оставить в покое. Изменения необходимо внести в сборку dev-front.

Шаг 1

Преобразуйте сборку dev-front в: optimizations none. Это одно из требований для re-frame-10x. Для этого в раздел cljsbuild файла profile.clj в разделе: dev-front: compiler необходимо добавить:

:main "setup-front.init"
:asset-path "js/out_front"

Затем файл html можно упростить, так как "setup-front.init" загрузит для вас все необходимое. Что-то вроде этого:

<body>

  <div id="app">
    <p>Minimum app does not work.</p>
  </div>

  <script type="text/javascript" src="js/front.js" charset="utf-8"></script>

</body>

Шаг 2

Обновление! Descjop по умолчанию использует старую версию clojurescript, которая не предоставляет некоторых функций, которые использует re-frame-10x. org.clojure / clojurescript "1.10.64" у меня работает.

После этого можно выполнять инструкции re-frame-10x, и все должно работать. Короче говоря, добавьте следующее в раздел cljsbuild прямо рядом с тем местом, где вы поместили: main оператор

:closure-defines      {"re_frame.trace.trace_enabled_QMARK_" true}
:preloads             [day8.re-frame-10x.preload]

и добавьте это в зависимости. Наверное, лучше всего зайти в раздел: profiles: dev. Тем не менее, проверьте инструкции или клоджары для получения самой последней версии:

[day8.re-frame/re-frame-10x "0.2.1-SNAPSHOT"]

Источник очень простого hello-world, использующего эти изменения, доступен на github.

Спасибо Майку Каллахану за суть этого решения.

person Iain    schedule 09.03.2018