Spring 使用 Gradle 和 Webpack 启动

Spring Boot with Gradle and Webpack

我有一个用 Spring Boot 和客户端 JS 编写的应用程序。所有 JS & CSS 代码都存储在 src/main/webapp 中,并使用 Webpack 编译到同一目录。把编译后的bundle放在那里似乎很脏,但我想知道是否有办法将它存储在构建目录中?

我已使用 build.gradle

中的下一个代码将其添加到 war 文件
from("${buildDir}") {
    include 'bundle.js'
}

但我不知道如何在 bootRun 任务或 Intellij Idea 中实现相同的效果。

此外,如何排除存储在 src/main/webapp/jssrc/main/webapp/scss 中的源文件?管理网络资产有哪些最佳实践?

你或许应该看看 Jhipster (http://jhipster.github.io/)

顺便说一句,对于我的项目,我显然更喜欢将客户端代码与服务器代码分开。 JS代码的'project-client'目录,在Java代码的'project-server'目录旁边。

前者显然具有 "standard Java" 文件结构。

对于第一个,JS 现在有自己的标准。好的,它们还不是很稳定 ;),但仍然如此。您的 JS 源代码可以是源代码的一半或更多,它的位置可能不在您的 Java 项目的子目录中...

而且像Webpack这样的工具非常强大。 Webpack 可以在相关时嵌入样式、图像或其他资源。源文件/资源​​文件/构建产品文件应该像在您的 Java 项目中一样清楚地分开。

开发时,使用webpack server。我的 index.html 主机页面(由 Java 服务器应得)简单地指向 localhost:[webpack-port]/main.js

然后是全局构建的问题,Gradle 很容易解决。 Gradle 调用 NPM(感谢 https://github.com/srs/gradle-node-plugin)来测试和构建 JS 部分,然后构建 Java 部分。它最终将最终的 jar 和 javascript 文件复制到最终的全局构建目录中。 JS 文件的名称 - 包含一个哈希值,你应该保留这个强大的功能! - 提供给 Java 应用程序使用的 conf 文件。

我费了很大劲才找到在我的网络应用程序中排除 node_modules 的解决方案。 我在 build.gradle

中添加了以下块
sourceSets {
main {
    resources {
        exclude '**/node_modules'
    }

   }
}

希望对您有所帮助。