混合Clojure和Clojurephant的ClojureScript构建

问题描述 投票:0回答:1

[我正在考虑将项目从boot移至Gradle,而clojurephant希望利用Gradle生态系统的更多优势。该项目构建了一个大型uberjar,其中包含一个带有Ring和Jetty的Clojure项目,而后者又附带了一个带有重新框架构建的ClojureScript应用程序。

在启动时,我基本上只需要添加boot-cljs

(boot-cljs/cljs :optimizations :advanced)

对于我的构建任务,它也调用(pom)(aot)(uber)(所有标准启动任务),并且所有工作都顺利进行。

[使用Clojurephant,我发现Clojure和ClojureScript部分最终位于不同的子目录中。特别是在build

的下面
  • clojure/main
  • clojurescript/main
  • [resources/main(基本上是我的resources项目文件夹的副本)]

让我感到困惑的是,这些路径没有以我可以看到的方式转换为Gradle使用shadow plugin构建的Uberjar的结构>

摘录自我的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']
      }
    }
  }
}

编辑:忘记提及启动时,我将init函数配置为开始将CLJS代码加载到名为app.cljs.edn的文件中。使用Clojurephant,我只能找到一种设置主命名空间而不是函数的方法。

我的问题是,最终,我如何配置ClojureScript构建,以便最终从Uberjar交付时起作用?

Clojure的事情似乎起作用。 Ring和Jetty运行并愉快地交付了第一个静态网页。但是找不到所有CLJS / JS东西。

我很高兴能收到一些指向其他项目的指导,我可以在其中学习,编写文档或教程。我没有发现太多,然后迷失了对Clojurephant本身代码的理解。

我正在考虑将一个项目从启动迁移到Gradle,而clojurephant希望利用Gradle生态系统的更多功能。该项目构建了一个大型uberjar,其中包含一个带有Ring的Clojure项目...

gradle clojure clojurescript
1个回答
1
投票

[一年前,我能够将CLJ和CLJS(后端/前端)组合项目拆分为2个独立的项目:用于后端的纯Clojure和用于前端的纯ClojureScript。这解决了我们遇到的许多问题,我再也不会尝试将两个代码库再次保留在同一项目中。

© www.soinside.com 2019 - 2024. All rights reserved.