我有一个关于基本网址的问题。我有一个React/Vite应用程序,它将被部署到一个托管许多其他Web属性的Web服务器中,作为其中的一部分,所有Web属性都包括共享JS和CSS。这些共享JS/CSS都是在域的根目录下提供的这些包含只是硬编码到我的主HTML文件中(通常是index.html,但在我的例子中是root.html)
我的React应用程序是从https://www.my-domain.com/apps/catalog/root.html
提供服务的。如果我只使用npm run dev
在本地运行我的应用程序,一切都可以正常工作-但是我的应用程序是从根目录提供服务的。我认为让这些都从基于/apps/catalog/
的URL运行的正确方法是使用--base=/apps/catalog
运行我所有的vite命令,这似乎几乎可以正常工作;问题是它重写了静态共享包含,这破坏了它们,因为它们被期望从根服务。
我想,我需要弄清楚如何标记特定的包含不受基本URL重写的影响?或者,有没有更好的方法来处理这个问题?
我的HTML文件w/静态包含的“共享”资产。我不想硬编码的“真实的的”域中的源网址,因为我的本地代理不能陷阱,并抓住他们的服务器端防止CORS的问题。
// /src/root.html
<html>
<head>
<!-- served from: https://www.my-domain.com/assets/shared.js -->
<script src="/assets/shared.js"/>
<!-- served from: https://www.my-domain.com/api/shared.js -->
<script src="/api/shared.js"/>
.. etc ..
</head>
<div id="app"></div>
</html>
我在vite.config.js中开始尝试引入基本url的概念(以及一个名为“main”的非index.html文件)
本地代理,因此这些静态包括解决了CORS问题,用于本地开发(它将这些静态资产代理到共享主机,并且本地一切正常)。
// src/vite.config.js
export default defineConfig({
plugins: [react()],
build: {
assetsDir: 'static-assets',
rollupOptions: {
input: {
app: './root.html',
},
},
},
base: '/apps/catalog/',
server: {
open: '/root.html',
proxy: {
'^/assets/.*|^/api/.*': {
target: 'https://www.my-domain.com',
changeOrigin: true
}
}
}
})
还有我的package.json,我试图在那里设置基本URL。
// package.json scripts
"dev": "vite --base=/apps/catalog/",
"build": "vite build --base=/apps/catalog/"
1条答案
按热度按时间67up9zun1#
我在使用Laravel 9 + vite v3.2.5时遇到了同样的问题。
我用实验性的
renderBuiltUrl
修复了它(几个小时后):请注意文档中的警告:
这个特性是实验性的,API可能会在未来的未成年人中更改,而不会永远遵循。请在使用它时将Vite的版本固定到未成年人。