【问题标题】:Including Node modules in Spring Boot jar在 Spring Boot jar 中包含 Node 模块
【发布时间】:2019-07-27 19:36:43
【问题描述】:

我有一个带有反应前端的 Spring Boot 应用程序。我有一个 package.json,其中包含我所有的节点依赖项,并为我的 Spring Boot 依赖项使用 gradle。

但是,当我想为我的生产环境构建一个 jar 时,我不确定如何包含节点模块,以便它们与 jar 一起提供(这样我的 react 前端就具有它在 prod 上所需的所有依赖项)。对于我的开发环境,我有一个任务来设置如下所示的环境:

task setupEnv {
group = 'application-dev'

dependsOn 'npmSetup'
dependsOn 'npmInstall'
} 

或者,是否可以以某种方式使用 docker 在生产环境中设置模块?我非常不确定如何进行此操作,我们将不胜感激。

【问题讨论】:

  • 如果你在 Spring 的 prod 中提供前端服务,你真的 需要 任何 Node 部门吗?您需要它们构建静态 HTML、JS 和 CSS 以放入 jar,但之后不需要。
  • @jonrsharpe,我相信我会需要它们(但不确定),我的依赖项包括我用于 UI 的 material-ui 之类的东西。
  • 所有这些都应该在捆绑文件中结束,输出目录被设计为静态服务。
  • @jonrsharpe,我认为这是有道理的,让我试试看。谢谢。
  • 我注意到并非所有依赖项都需要存在。只有一些。

标签: reactjs spring-boot gradle npm package.json


【解决方案1】:

您很可能使用某种构建步骤来生成前端资产,例如Webpack/Gulp/NPM 脚本。将该 JS 构建过程的输出指向src/main/resources

您的 Gradle 构建应基于 Spring Boot Gradle plugin。使用 Gradle 插件,Gradle 将自动创建包含所有前端资产的胖 JAR。 Spring Boot 默认将其作为 Web 应用程序的前端资产。

如果您遵循 Spring Boot 默认设置,则无需执行任何特殊操作。

【讨论】:

  • 很抱歉,您没有回答问题。
  • @NesanMano,实际上我确实回答了。但是不了解 Spring Boot 生态系统基础知识的开发人员可能会错过它。现在答案已更新,并且更具体地说明了这些前端资产将如何在 JAR 中结束。
  • @luboskrnac 赞成回答这个问题;但是,我认为它可以使用一些调整,因为src/main/resources 很可能已检查到源代码控制中。我通常做的是将 webpack 输出到build/resources,并将其添加到bootJartask 的类路径中,这样gradle clean 也会删除 webpack 工件
  • 我为此使用 .gitignore。现代 IDE 可以很好地使用这个 git 功能。
猜你喜欢
  • 2018-03-05
  • 1970-01-01
  • 2017-05-17
  • 2015-08-21
  • 2019-06-21
  • 2019-06-19
  • 2014-11-27
  • 2017-08-16
  • 2018-04-01
相关资源
最近更新 更多