此外,在Vaadin中如何导入这些文件?Vaadin 14使用npm和Vaadin 10-13使用bower有什么区别吗?
所有路径都相对于项目根目录,例如Maven项目中的pom.xml
文件所在的位置。
使用@JsModule
导入的JavaScript会使用严格模式,这意味着全局变量必须在window
对象上定义,如:window.x = ...
,而不能只定义为x = ...
等。
@CssImport("./my-styles/styles.css")
[1]/frontend/my-styles/styles.css
@JsModule("./src/my-script.js")
[1]/frontend/src/my-script.js
new Image("img/flower.jpg", "A flower")
/src/main/webapp/img/flower.jpg
@CssImport("./my-styles/styles.css")
[1]/frontend/my-styles/styles.css
@JsModule("./src/my-script.js")
[1]/frontend/src/my-script.js
new Image("img/flower.jpg", "一朵花")
/src/main/resources/META-INF/resources/img/flower.jpg
@CssImport("./my-styles/styles.css")
[1]/src/main/resources/META-INF/resources/frontend/my-styles/styles.css
@JsModule("./src/my-script.js")
[1]/src/main/resources/META-INF/resources/frontend/src/my-script.js
new Image("img/flower.jpg", "一朵花")
/src/main/resources/META-INF/resources/img/flower.jpg
@StyleSheet("css/styles.css")
[2]/src/main/webapp/frontend/css/styles.css
@HtmlImport("src/template.html")
/src/main/webapp/frontend/src/template.html
@JavaScript("js/script.js")
[3]/src/main/webapp/frontend/js/script.js
new Image("img/flower.jpg", "A flower")
/src/main/resources/META-INF/resources/img/flower.jpg
@StyleSheet("css/styles.css")
[2]/src/main/resources/META-INF/resources/frontend/css/styles.css
@HtmlImport("src/template.html")
/src/main/resources/META-INF/resources/frontend/src/template.html
@JavaScript("js/script.js")
[3]/src/main/resources/META-INF/resources/frontend/js/script.js
new Image("img/flower.jpg", "一朵花")
/src/main/resources/META-INF/resources/img/flower.jpg
[1] @JsModule
和 @CssImport
注解也可以用于从npm包中导入。在这种情况下,路径被定义为 @JsModule("@polymer/paper-input")
或 @CssImport("some-package/style.css")
。 涉及到本地前端目录的路径应以./
为前缀
[2] 在 Vaadin 14 中,@StyleSheet
注释也可与 npm 一起使用。可以使用与 V10-V13 相同的路径,包括 context://
协议 @StyleSheet("context://style.css")
,它会将路径解析为相对于 Web 应用程序的上下文路径,就像其他静态文件一样。以这种方式包含的样式可能会导致 Web 组件出现问题。
[3] 在 Vaadin 14 中,@JavaScript
注释也可与 npm 一起使用。然后应使用 V14 /frontend
文件夹。
src/main/resources
目录下,并使用 getClass().getResourceAsStream("/myfile.txt")
来访问它,注意斜杠前面的那个符号很重要。 - Erik LummeVaadin 15
应更改为Vaadin Latest
,链接应为https://vaadin.com/docs/latest/flow/advanced/loading-resources#resource-cheat-sheet。无论如何,不支持Vaadin 15,用户将被重定向到最新版。 - Avec从项目根目录开始创建一个常见的目录 /resources/static
在生产环境中通过 nginx 路由请求,在本地开发环境中则通过 Spring 路由请求
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("file:./resources/static/")
.setCachePeriod(3600);
registry.setOrder(Integer.MAX_VALUE);
}
对于 CSS,删除所有内容
@CssImport("./styles/root/global-styles.css")
并将其放置在 MainView (@Route
视图) 中,参见 https://vaadin.com/docs/v14/flow/styling/importing-style-sheets:
@StyleSheet("/static/css/global-styles.css")
对于图片,将其放入CSS中
.plus-btn {
background: url("../static/icons/plus.svg") no-repeat center;
}