Я подумываю переместить проект из boot в Gradle с clojurephant в надежде использовать больше экосистемы Gradle. Этот проект создает один большой Uberjar, который содержит проект Clojure с Ring и Jetty, который, в свою очередь, поставляет приложение ClojureScript, созданное с перекадровкой.
При загрузке мне просто потребовалось boot-cl js, добавлено
(boot-cljs/cljs :optimizations :advanced)
в мою задачу сборки, которая также вызывает (pom)
, (aot)
и (uber)
(все стандартные загрузочные задачи), и все работало гладко.
С Clojurephant я обнаружил, что части Clojure и ClojureScript оказываются в разных подкаталогах. В частности, я нахожу под build
clojure/main
clojurescript/main
resources/main
(по сути, копию моей папки проекта resources
)
В дополнение к моему заблуждению, эти пути не преобразуются так, как я вижу, в структуру Uberjar, которую Gradle создает с помощью плагина тени
Некоторые выдержки из моего build.gradle
:
plugins {
id 'dev.clojurephant.clojure' version '0.5.0'
id 'dev.clojurephant.clojurescript' version '0.5.0'
id 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
id 'maven-publish'
id 'distribution'
id 'com.meiuwa.gradle.sass' version '2.0.0'
}
// ...
clojure {
builds {
main {
aotAll()
}
}
}
// ...
clojurescript {
builds {
all {
compiler {
outputTo = 'public/app.js'
outputDir = 'public/js/out'
main = 'com.example.mycljsstuff'
assetPath = 'js/out'
}
}
main {
compiler {
optimizations = 'advanced'
sourceMap = 'public/app.js.map'
}
}
dev {
compiler {
optimizations = 'none'
preloads = ['com.example.mycljsstuff']
}
}
}
}
EDIT: забыл упомянуть, что для загрузки я настраиваю функцию init, чтобы начать загрузку кода CL JS в файл с именем app.cljs.edn
, С Clojurephant я нашел только способ установить основное пространство имен, а не функцию.
В конечном итоге мой вопрос заключается в том, как я могу настроить сборку ClojureScript, чтобы она работала в конце при доставке из Uberjar?
Кажется, что Clojure работает. Ring и Jetty работают и с радостью предоставляют первую веб-страницу stati c. Но все вещи CLJS / JS не могут быть найдены.
Я был бы очень рад просто получить некоторые ссылки на другие проекты, где я могу учиться, документацию или учебные пособия. Я не нашел много, а потом заблудился в понимании кода самого Clojurephant.