我想在 Spring 引导多模块应用程序中使用 angular 4 作为客户端框架。 我的应用程序包含 3 个模块
- 域模块
- 服务模块
- Web 模块(弹簧启动模块(
Angular 4 根目录位于 Web 模块中。
我可以使用"ng build"命令启动bootRun来执行应用程序(该命令编译角度打字稿文件并在springBoot静态资源目录中复制结果文件( 这项工作是你的(顺便说一下,感谢Umesh Morsu的优秀教程 https://www.youtube.com/watch?v=nHRA7cbL0vk(。
下面我用来执行此操作的 gradle 脚本:
task buildClientDev(type: NpmTask, dependsOn: 'npmInstall') {
group = 'build'
description = 'Compile client side folder for development'
args = ['run','buildDev']
}
task buildClientWatch(type: NpmTask, dependsOn: 'npmInstall'){
group = 'application'
description = "Build and watches the client side assets for rebuilding"
args = ['run','buildWatch']
}
bootRun{
doFirst {
tasks.buildClientDev.execute()
}
}
这样做的问题是,当我修改 TypeScript 文件(以生成 js 文件(时,我必须重新运行 bootRun。我希望这一代人是自动完成的。所以我想称tasks.buildClientWatch.execute()
执行"ng build watch=true
"。但是当我这样做时,弹簧启动应用程序无法启动。 当我使用doLast
而不是doFirst
时,我的 Springboot 应用程序启动良好,但 doLast 中的 gradle 调用既没有执行。
那么如何同时运行 springBoot bootRun 命令和ng build watch=true
呢?
在使用 angular 开发应用程序 3 年后,我认为在这种情况下最好的办法是将前端与后端完全分开。
所以我可以为我的角度前端应用程序创建一个 npm 或 gradle 项目。 对于后端,我可以根据需要创建微服务和模块。 我认为这是当今最好的模式。
我建议直接使用 npm 而不使用 Gradle(因为我这样做没有任何问题(。大多数 IDE 也以组合构建/启动组的方式支持此功能。