Quasar CLI with Vite - @quasar/app-vite

处理静态资源

您会注意到在项目结构中我们有两个资源目录:/public//src/assets/。他们有什么区别?前者是纯静态资源,后者需要由构建工具打包处理后导入。

我们先讨论常规资源和静态资源的区别。

常规资源 - /src/assets

*.vue 组件中,所有的模板和 CSS 都会经过 vue-html-loadercss-loader 进行解析,在解析时会查找其中的资源链接。例如: 在<img src="./logo.png">background: url(./logo.png), "./logo.png" 中存在相对路径,它们会被 Vite 解析成一个依赖模块。

由于这些资源可能在构建期间被内联/复制/重命名,因此它们可被看作是源代码的一部分。这也是为什么推荐您将其放在 /src/assets 目录下,与其他源码放在一起。实际上,甚至不需要将它们全部都放在 /src/assets 目录下,例如,您可以将每个组件需要用的资源跟组件放在一起。

资源解析规则

相对路径,例如:./assets/logo.png,会被解析为一个依赖模块。它们将根据您的 vite 输出配置将它们替换为自动生成的 URL。

前缀为 ~ 的 URL 会被视为模块请求,类似于导入 import 'some-module/image.png'。如果要利用 Vite 的模块解析,则需要使用此前缀。所以推荐您这样使用:<img src="~assets/logo.png">,注意其中的 ~ 前缀。

静态资源 - /public

绝对路径不会被构建工具处理(例如:/logo.png – 其中 ‘/’ 是您设置的 publicPath)这些资源应该放在 public/ 目录中。这个目录中的内容不会被处理,在构建时会被简单的被复制到产物目录中。

Assets vs Statics

“assets” 目录中的文件,只有您在 vue 文件中引入并使用了的文件,才会被打包到构建产物中去。 而 “public” 目录中的文件在构建时全部都会被直接复制到构建产物中去。

WARNING

如果您不是构建 SPA/PWA/SSR 应用,那么 /public/icons/*/public/favicon.ico 目录中的文件不会被构建到应用中,因为它们不会用于任何目的。例如,Electron 或 Cordova 应用程序不需要这些文件。

更多关于 Vite

请阅读 Vite 文档.