在项目根目录外调用 outDir
Vite outDir outside of the project root
我正在使用 Vite 构建 Vue3 项目,我正在使用 Vite build.outDir 选项在 Vue3 应用程序根目录之外构建项目。这是我的项目结构,在 frontend
文件夹中,Vue3 应用程序位于:
my-app/
├─ frontend/
├─ public/
│ ├─ dist/
| ├─ .htaccess
│ ├─ app.php
我正在尝试将 Vue3 项目构建到 my-app/public/dist/
文件夹,我通过将 vite.config.js
中的 outDir
设置为:
来实现这一点
build: {
outDir: '../public/dist'
},
就像那个项目是在 dist
文件夹中构建的,但是当我在浏览器中打开页面源代码时,相对于构建脚本的 URL 是不正确的:
<link rel="stylesheet" href="/assets/index.585a031a.css">
例如 /assets/index.585a031a.css
应该是 /dist/assets/index.585a031a.css
。因此,我添加了另一个 Vite 选项 base
为:
base: '/dist/',
就像那样,当我转到页面源时一切正常,但问题是应用程序的 URL 从 example.com
更改为 example.com/dist
。
这是我的 .htaccess
文件,但我认为它与 .htaccess
无关,因为我在 Vue2 应用程序中使用默认 Vue CLI(未使用 Vite)具有相同的设置:
# Disable directory listing
Options -Indexes
# Enable the rewrite engine
RewriteEngine On
# Sets the base URL for rewrites
RewriteBase /
# Access to domain root should serve dist folder
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /dist/ [L]
# If URL doesn't match any static assets it should serve dist folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/api/*
RewriteRule . /dist/ [L]
# If URL contains api it should serve app.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /api/*
RewriteRule .* app.php [QSA,L]
所以,主要问题是我如何仍然在 public/dist
文件夹中构建应用程序并保留应用程序 example.com
而不是 example.com/dist
的 URL?
问题是您的 index.html
位于 dist
文件夹中。因此 URL 需要 example.com/dist
才能为您的 index.html
服务。您可以手动将 index.html
移动到 public
文件夹,以查看它是否适用于 URL example.com
.
解决方案:将您的配置更改为:
{
...
// base: '/dist/', remove base config
build: {
outDir: '../public', // this line place index.html in the public folder
assetsDir: './dist', // this line place your assets in the public/dist folder
}
}
我正在使用 Vite 构建 Vue3 项目,我正在使用 Vite build.outDir 选项在 Vue3 应用程序根目录之外构建项目。这是我的项目结构,在 frontend
文件夹中,Vue3 应用程序位于:
my-app/
├─ frontend/
├─ public/
│ ├─ dist/
| ├─ .htaccess
│ ├─ app.php
我正在尝试将 Vue3 项目构建到 my-app/public/dist/
文件夹,我通过将 vite.config.js
中的 outDir
设置为:
build: {
outDir: '../public/dist'
},
就像那个项目是在 dist
文件夹中构建的,但是当我在浏览器中打开页面源代码时,相对于构建脚本的 URL 是不正确的:
<link rel="stylesheet" href="/assets/index.585a031a.css">
例如 /assets/index.585a031a.css
应该是 /dist/assets/index.585a031a.css
。因此,我添加了另一个 Vite 选项 base
为:
base: '/dist/',
就像那样,当我转到页面源时一切正常,但问题是应用程序的 URL 从 example.com
更改为 example.com/dist
。
这是我的 .htaccess
文件,但我认为它与 .htaccess
无关,因为我在 Vue2 应用程序中使用默认 Vue CLI(未使用 Vite)具有相同的设置:
# Disable directory listing
Options -Indexes
# Enable the rewrite engine
RewriteEngine On
# Sets the base URL for rewrites
RewriteBase /
# Access to domain root should serve dist folder
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /dist/ [L]
# If URL doesn't match any static assets it should serve dist folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/api/*
RewriteRule . /dist/ [L]
# If URL contains api it should serve app.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /api/*
RewriteRule .* app.php [QSA,L]
所以,主要问题是我如何仍然在 public/dist
文件夹中构建应用程序并保留应用程序 example.com
而不是 example.com/dist
的 URL?
问题是您的 index.html
位于 dist
文件夹中。因此 URL 需要 example.com/dist
才能为您的 index.html
服务。您可以手动将 index.html
移动到 public
文件夹,以查看它是否适用于 URL example.com
.
解决方案:将您的配置更改为:
{
...
// base: '/dist/', remove base config
build: {
outDir: '../public', // this line place index.html in the public folder
assetsDir: './dist', // this line place your assets in the public/dist folder
}
}