Организация проекта и конфигурация cljsbuild требуют пространства имен

Как мне организовать структуру моего проекта и настроить cljsbuild для использования собственного пространства имен? Например, в моей папке project/src-cljs у меня есть:

└── project
    ├── file1
    │   └── file1.cljs
    ├── file2
    │   └── file2.cljs
    └─── required
        └── required.cljs

Я бы хотел, чтобы file1.cljs (в пространстве имен file1.file1) и file2.cljs (в пространстве имен file2.file2) требовалось required.cljs (в пространстве имен required.required).

Мой :cljsbuild выглядит так:

:cljsbuild {:builds
            [{:source-paths ["src-cljs/project/file1"]
              :compiler {:output-to "resources/public/js/file1.js"}}
             {:source-paths ["src-cljs/project/file2"]
              :compiler {:output-to "resources/public/js/file2.js"}}]}

Когда я (:require [required.required :as required]) и компилирую, я получаю исключение:

Caused by: clojure.lang.ExceptionInfo: No such namespace: required.required, could not locate required/required.cljs, required/required.cljc, or Closure namespace "required.required" at line 1 src-cljs/project/file1/file1.cljs


person deadghost    schedule 07.08.2015    source источник


Ответы (1)


Обычно вам не нужен отдельный выходной файл js и профиль cljsbuild для каждого пространства имен. Вам нужен один профиль cljsbuild, включающий все ваши пространства имен. Что-то типа:

:cljsbuild {:builds
            [{:source-paths ["src-cljs/project"]
              :compiler {:output-to "resources/public/js/project.js"}}]}

Мало того: вы можете захотеть иметь ["src-cljs"] как :source-paths, а затем назвать свои пространства имен, например, project.ns1.sub-ns1. Но вы можете сделать это и без префикса project ns.

Вы можете найти пример этого простого макета в простом примере проект от lein-cljsbuild

Глядя на cljsbuild README, кажется, что вы выбрали путь "Несколько конфигураций сборки ". На практике это в основном используется для создания отдельных профилей сборки для вашего основного кода и тестов, работающих с этим кодом. Это показано в расширенном примере.

person nberger    schedule 10.08.2015