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/js
和 src/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'
}
}
}
希望对您有所帮助。
我有一个用 Spring Boot 和客户端 JS 编写的应用程序。所有 JS & CSS 代码都存储在 src/main/webapp
中,并使用 Webpack 编译到同一目录。把编译后的bundle放在那里似乎很脏,但我想知道是否有办法将它存储在构建目录中?
我已使用 build.gradle
from("${buildDir}") {
include 'bundle.js'
}
但我不知道如何在 bootRun 任务或 Intellij Idea 中实现相同的效果。
此外,如何排除存储在 src/main/webapp/js
和 src/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'
}
}
}
希望对您有所帮助。