bgr*_*ves 6 spring spring-boot vue.js vue-cli vite
有多种方法可以将 Vue 项目集成到 Spring Boot 项目中。
使用基于 webpack 的构建工具(例如 vue-cli),我已经通过以下方式成功完成了几次:
outputDir构建过程,使其输出放置在例如/static/dist/(最终)Spring Boot 项目的Java 类路径内。这样,这些静态资源就可以通过 URL 提供服务/dist/...。要在生成中获得正确的 URL,当然index.html 必须publicPath将其设置为/dist/。baseUrl不等于/(在大型生产系统中是必要的)和不等于 /dist/- 假设它baseUrl等于/vue/。现在,在 Spring Boot 中,转发所有匹配的请求/vue/**,/dist/index.html以便 Vue Router 可以接管处理给定的 URL。这样我在生产中就没有出现任何问题。在开发模式下使用提供的开发服务器的行为没有差异 - 实时重新加载(HMR)按预期工作,并且与 Spring Boot 后端通信也没有问题(当然必须为开发服务器配置代理)。
在生产模式下,使用此设置(baseUrl构建过程和 Vue 路由器的不同 s)与 Vite似乎完全没问题!(至少到目前为止我没有遇到任何问题)
但在开发模式下,我遇到了内置开发服务器的几个问题。可能是由于baseUrl我收到的不同信息,例如,如果我重新加载浏览器,则会出现以下消息:
服务器配置了公共基本 URL /dist/ - 您是否打算访问 /dist/vue/?
此外,我在配置开发服务器的代理时遇到问题。特定的 URL 可以非常简单地代理,但我不知道如何以更通用的方式配置代理,就像我在基于 webpack 的构建中所做的那样(不会破坏最初在 Vite 中运行良好的实时重新加载)。
总而言之,它非常复杂且难以解释。为此,我在此github 存储库中创建了一个非常简单的演示项目。
欢迎评论、帮助和 PR!;-)
Era*_*rin -1
关于主要问题,据我了解问题、用例和期望的行为。生产构建似乎按预期工作,但开发构建+开发服务器正在崩溃,IMO 解决该问题的最简单方法是根据构建模式在 vite 配置中条件值。这是我想出的例子:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import * as path from 'path'
export default defineConfig(({ mode }) => ({
plugins: [vue()],
base: mode === 'production' ? '/vite-project/' : '/',
build: {
outDir: '../../../../target/classes/static/vite-project',
assetsDir: '',
rollupOptions: {
output: {
entryFileNames: `[name].js`,
chunkFileNames: `[name].js`,
assetFileNames: `[name].[ext]`
}
}
},
server: {
proxy: {
'.*': {
target: 'http://localhost:8080',
changeOrigin: true,
ws: false,
rewrite: (path) => path.startsWith('/t/') ? path : null
}
}
},
resolve: {
alias: {
// eslint-disable-next-line no-undef
'@': path.resolve(__dirname, 'src'),
}
},
define: {
'process.env.MY_CUSTOM_BASE': '"t"',
},
}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |