Angular2 Spring Boot项目结构

4

我有一个新的angular2项目,它使用了快速入门中描述的标准文件结构进行构建。我正在尝试构建一个API网关,并让spring-boot托管我的应用程序,但是我还没有能够配置boot使用我的项目中生成源代码的/dist目录。项目结构如下:

project  
|--dist  
|--node_modules
|--src  
|  |--app  
|  |--assets
|  |--main  
|  |  |--java  
|  |  |--resources
|  |  |  |--config  
|  |  |--webapp
|  |  |  |--WEB-INF  

我希望使用默认的/dist目录,这样我就可以在UI上进行持续开发,仍然可以使用npm/webpack。

我尝试进行如下静态资源目录配置:

 spring.resources.staticLocations: /dist

但似乎这并不起作用。
我创建了一个资源处理程序来直接指向dist目录:
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

  @Override
  public void addResourceHandlers(final ResourceHandlerRegistry registry) {

    String currentPath = new File("./").getAbsolutePath();
    currentPath = "file:///" + currentPath;

   registry.addResourceHandler("/**").addResourceLocations(currentPath + "/dist/");
  }
}  

这解决了部分问题,但现在我的根URL('/')不再映射到index.html。
有没有更简单/更好的方法来配置spring-boot以查找/dist项目目录?我的项目结构应该改变吗?我真的很想让所有这些部分干净地一起工作。

你需要使用类路径中的位置,而不是直接访问磁盘上的位置。(毕竟在jar包中不会有它!)我通常将我的JS管道配置为输出到“target/classes”中。 - chrylis -cautiouslyoptimistic-
2个回答

2

Spring Boot会自动添加以下任何一个目录中的静态网页资源:

/META-INF/resources/

/resources/

/static/

/public/

这些文件夹是相对于src/main/resources的。

如果您将index.html放置如下位置,则Spring可以在不进行任何配置的情况下为您提供文件服务。

src/main/resources/META-INF/resources/index.html

src/main/resources/resources/index.html

src/main/resources/static/index.html

src/main/resources/public/index.html

1

我采纳了@chrylis的建议,并将webpack构建的目标目录指向了build/dist(使用Gradle)。

我避免将生成的源代码放在/resources/**中,因为最终这将被构建成一个.war文件并部署到企业应用服务器上——我不想在我的构建中有很多包含/排除逻辑来支持这一点。此外,构建目录似乎是生成的.js源代码的更合理的位置。

现在我的项目结构看起来像这样:

project  
|--build
|  |--dist
|  |--...  
|--node_modules
|--src  
|  |--app  
|  |--assets
|  |--main  
|  |  |--java  
|  |  |--resources
|  |  |  |--config  
|  |  |--webapp
|  |  |  |--WEB-INF  

我删除了WebMvcConfigurerAdapter,并将静态资源配置为指向我的构建中的dist目录:

spring.resources.static-locations: "file:./build/dist/"  

我现在能够使用相同的源代码,并且只需要非常少的配置开销,就可以运行Webpack、Spring-Boot或部署到我的应用服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接