javascript - Vite 开发服务器中的自定义 URL(多页面应用程序)
问题描述
我正在使用Vite构建一个多页面应用程序(从 Webpack 迁移)。
要在开发服务器中打开登录页面,我必须转到:localhost:3010/login.html
是否可以调整 Vite 配置以使用 URL 为 login.html 提供服务:(localhost:3010/login
不带 .html)?
// vite.config.js excerpt
export default {
build: {
rollupOptions: {
input: {
index: new URL('./index.html', import.meta.url).pathname,
login: new URL('./login.html', import.meta.url).pathname,
}
}
},
server: {
port: 3010,
proxy: {
'/api': 'http://localhost:5000/',
},
},
};
解决方案
configureServer(server)
使用 Vite 插件的API配置 Vite 开发服务器。该方法的server
参数是 a ViteDevServer
,其middlewares
属性是基础Connect实例。middlewares.use()
使用充当自定义中间件的方法调用。
这是一个基本插件,用于配置开发服务器以替换/login
为/login.html
,添加到Vite 配置中的plugins
数组中:
import { defineConfig } from 'vite'
const LoginHtmlFallbackPlugin = {
name: 'login-html-fallback',
configureServer(server) {
server.middlewares.use('/login', (req, res, next) => {
req.url += '.html'
next()
})
}
}
export default defineConfig({
plugins: [
LoginHtmlFallbackPlugin
],
})
还有一个更动态的插件,只有当它存在时才会回退到相应的.html
文件(附加.html
到无扩展名的 URL):
// build/plugins/html-ext-fallback.js
import path from 'path'
import fs from 'fs'
export default (options) => ({
name: 'html-ext-fallback',
configureServer(server) {
server.middlewares.use((req, res, next) => {
// Check extensionless URLs but ignore the `/` root path
if (req.originalUrl.length > 1 && !path.extname(req.originalUrl)) {
if (fs.existsSync(path.join(options.rootDir, `${req.originalUrl}.html`))) {
req.url += '.html'
}
}
next()
})
}
})
// vite.config.js
import { defineConfig } from 'vite'
import HtmlExtFallbackPlugin from './build/plugins/html-ext-fallback'
export default defineConfig({
plugins: [
HtmlExtFallbackPlugin({ rootDir: __dirname })
],
})
推荐阅读
- python - 尝试使用 setter 但我收到此错误:@versionNum.setter AttributeError: 'int' object has no attribute 'setter'
- python - 用python创建地理地图
- spring-boot - [SPRINGBOOT]:Swagger 讨厌 *both* HATEOAS 依赖 _and_ 升级
- reactjs - 避免递归重新渲染
- ios - 有什么方法可以禁用弹出窗口拖动?
- python - 使用 open cv 同时打开两个视频?第二次开始有点晚
- components - Blazor - 无法从“方法组”转换为“EventCallback”
- amazon-web-services - AWS Web 服务器 NACL 规则上的临时端口
- javascript - 节点上传 mp3 到 S3 文件大小未上传
- python - Django递归序列化