Vite 开发服务器中的自定义 URL(多页面应用程序)

2023-12-29

我正在构建一个多页面应用程序Vite https://vitejs.dev/(从 Webpack 迁移)。

要在开发服务器中打开登录页面,我必须转到:localhost:3010/login.html

是否可以调整 Vite 配置来提供 login.html,其 URL 如下: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/',
    },
  },
};

使用 Vite 插件配置 Vite 开发服务器configureServer(server) https://vitejs.dev/guide/api-plugin.html#configureserverAPI。那个方法的server参数是一个ViteDevServer https://vitejs.dev/guide/api-javascript.html#vitedevserver, whose middlewares财产是基础Connect实例 https://github.com/senchalabs/connect. Call middlewares.use() https://github.com/senchalabs/connect#appusefn使用充当自定义中间件的方法。

这是一个配置开发服务器以替换的基本插件/login with /login.html,添加到plugins array https://vitejs.dev/config/#plugins在Vite配置中:

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
  ],
})

demo 1 https://stackblitz.com/edit/vite-dev-server-html-fallback-ea9csb?file=vite.config.ts

以及一个更动态的插件,可以回退到相应的.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 })
  ],
})

demo 2 https://stackblitz.com/edit/vite-dev-server-html-fallback?file=vite.config.ts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vite 开发服务器中的自定义 URL(多页面应用程序) 的相关文章

  • 如何使用nodeJS SFTP客户端列出所有子目录?

    有趣的节点 JS ssh2 sftp client 我想列出给定路径中的所有目录及其子目录 let sftp new ssh2SftpClient console log sftp sftp connect host xx xxx xxx
  • 如何监控浏览器中发出的所有自定义事件?

    我想监视网络浏览器中触发的所有自定义事件 任何标准浏览器都可以 需要明确的是 我知道您可以附加事件处理程序来查看何时触发 通常 事件 但如何可靠地检测嵌入对象或 jQuery 脚本是否触发自定义事件 我可以重构浏览器源代码来挂钩事件循环 但
  • JS如何获取多维数组的最大深度?

    我有一个多维数组 我想知道它的最大深度 我发现了这个灵魂 但它不适用于对象数组 const getArrayDepth arr gt return Array isArray arr 1 Math max arr map getArrayD
  • 从 Angular 6 服务中绑定图像

    我有一个端点 它根据某些参数为我提供图像 这不是一个图像网址 而是一个普通图像 因此 当我到达邮递员中的端点时 作为响应 我收到一张图像 JPG 我是否可以在变量中接收该图像并将其绑定到 HTML 标签中 所有问题都有将图像 url 映射到
  • 画布图像遮罩/重叠

    在我的项目中 我必须使用画布在另一个相同尺寸和图案图像上实现一个不同的颜色图像 并且图像不是圆形或矩形形状 所有这些都是波浪形状的 它将应用于单个主背景图像 以便在每个主背景图像上显示多个图形onclick功能 重叠的图像应更改为另一种选定
  • RequireJS 不遵循设置了 baseUrl 的 data-main 的相对路径

    使用 requireJS 我尝试为我的数据主指定一个与 baseUrl 不同的路径 看来 requireJS 会忽略我在文件名之前输入的任何内容 并始终在 baseUrl 文件夹中查找该文件 我有以下文件夹结构 index html scr
  • 拖放图像上传在服务器上不起作用

    我正在尝试实现拖放图像上传 我在网上找到了一个相当简单的脚本并适合我的使用 在我的本地安装中 文件上传得很好 但在服务器上却不行 从我的调试尝试来看 SERVER HTTP X FILENAME 甚至没有被 php 设置 我尝试了以下方法
  • contenteditable 在 safari 中不起作用,但在 chrome 中起作用

    我有一个奇怪的问题 这在 chrome 中按预期工作 但在 safari 中它只会发光 但不会对按键输入做出反应 这是触发文本版本的方法 var namebloc event currentTarget find column filena
  • Google Maps JS Api - b.get 不是函数错误(isLocationOnEdge)

    我想检查我的路线上是否有标记 所以我尝试使用 isLocationOnEdge 但收到 TypeError b get 不是函数 错误 这是我的代码 我尝试了几次更改但无法解决问题 var directionsDisplay new goo
  • 发送404状态并重定向到react-router中的404组件

    我有一个 React router 3 0 0 设置 其中包含一个 NotFound 组件 我将其显示为后备
  • 传单 - 导入 Geojson - Angular 6

    我尝试将 GeoJson 文件导入到 Angular 的应用程序 6 中的传单中 通过这个解决方案 我的 geojson 是在 leafletmap 中绘制的 但我有这个错误 我无法构建我的应用程序 有人知道一种解决方案吗 错误 TS234
  • html输入数字,min + step,使step忽略min?

    是否有可能使step忽略min属性
  • Node.js - Async.js:并行执行如何工作?

    我想知道 async js 中并行执行是如何工作的 async require async async parallel function callback for var i 0 i lt 1000000000 i Do nothing
  • Javascript/DOM:如何删除 DOM 对象的所有事件侦听器?

    只是问题 有没有办法完全删除对象的所有事件 例如一个div 编辑 我添加每div addEventListener click eventReturner false 一个事件 function eventReturner return f
  • 使用重复模式捕获正则表达式

    我试图捕获字符串的所有部分 但我似乎无法正确处理 该字符串具有以下结构 1 22 33 中间有运算符的数字 可以有任意数量的术语 我想要的是 1 22 33 1 22 33 但我得到 1 22 33 22 33 我尝试过各种正则表达式 这是
  • 更改 CSS 样式表的选择器属性

    以下是我们传统上如何更改重复元素的样式 将样式应用到每个元素 function changeStyle selector prop val var elems document querySelectorAll selector Array
  • Material UI 选择覆盖主题中的位置

    我想覆盖主题中选择字段下拉列表的位置 不必在每个选择上实现它 我尝试过 createMuiTheme overrides MuiSelect select MenuProps getContentAnchorEl null anchorOr
  • 谷歌地图绘制两点之间的路线

    我编写了这段无辜的 JavaScript 代码 它允许用户创建两个标记并绘制它们之间的路线 它不起作用 相反 它给出了一个奇怪的错误 Uncaught TypeError Cannot read property ya of undefin
  • 当 jQuery .remove() 用于删除脚本标签时,它是否会清除加载的 JavaScript?

    正如标题所示 如果我使用以下命令从 DOM 中删除脚本标签 scriptid remove javascript 本身是保留在内存中还是被清除了 或者 我完全误解了浏览器处理 javascript 的方式吗 这是很有可能的 对于那些对我提问
  • 如何制作饼图聚合数据源?

    Using 适用于 ASP NET MVC 的 Kendo UI 完整版 http www kendoui com 版本 2013 3 1119 2013年11月20日 如果我有这段代码 status chart kendoChart da

随机推荐

  • 如何在 Typescript 项目中正确导入命名空间?

    我正在观看视频教程 并且创建了一个新的打字稿项目 首先 我在根目录中创建了以下命名空间 utilityFunctions ts namespace Utility export namespace Fees export function
  • Flask-RESTful:使用 GET 通过 REST 下载文件

    我正在尝试编写一个公开 REST 接口的文件共享应用程序 我正在使用的库 Flask RESTful 仅支持通过以下方式返回 JSONdefault http flask restful readthedocs org en latest
  • webgl readpixels 始终返回 0,0,0,0

    我正在尝试在 WebGl 中进行挑选 我渲染了两个形状 每个形状上映射了不同的纹理 我正在尝试抓取某些坐标上的像素 这是一个例子 var pixelValues new Uint8Array 4 gl readPixels 10 35 1
  • 尝试使用 C# 打开我的 Excel 文件并收到错误

    我尝试从代码中读取我的 Excel 文件并收到System InvalidCastException Additional information Unable to cast COM object of type System ComOb
  • 为什么Django中的404页面没有处理中间件?

    所以我在 URL 配置中设置了一个路径 path kitten views Kitten as view name kitten 以及同一视图中缺少 URL 的处理程序 handler404 views Kitten as view 我有一
  • 从 MyISAM 迁移到 InnoDB

    我对这个主题进行了一些搜索并找到了一些结果 然而 我正在寻找是否有人知道或可以向我指出一些真实或有信誉的案例研究 这些案例研究详细说明了从 MyISAM 迁移到 InnoDB 的好处 特别是性能 如果您能指出任何有关 MySQL 5 5 及
  • 管道“DatePipe”的参数“日期格式”无效?

    这似乎是一个简单的问题 我在 Ionic 2 应用程序中使用管道来获取日期格式 这是收到的 Web 服务响应 MessageID 544882 CategoryID 1 DateSent 2015 05 18T02 30 56 Title
  • 如何刷新 Bokeh 文档

    我想刷新散景文档 以便我可以用新的绘图替换旧的绘图 然而 现在我只是将新的绘图附加到文档中 这样旧的绘图就不会消失 myfile py from bokeh plotting import curdoc figure doc curdoc
  • shinyjqui::orderInput 中的最大项目

    如何限制数组中元素的数量orderInput小部件 来自包shinyjqui 例如 在下面的代码片段中 我想在第一个小部件中选择最多 2 个月 ui R library shiny library shinyjqui shinyUI flu
  • 如何让 android 服务保持phonegap ui 的活动

    我正在开发一个使用phonegap cordova 的Android 应用程序 该应用程序使用 JavaScript 不时从服务器获取内容 并在有新内容时发出系统托盘警报 我面临的问题是 当 Android 内存不足或其他任何情况时 应用程
  • 将对象数组转换为数组数组

    var json one text1 two text2 three 3 four 4 one text3 two text4 three 5 four 6 one text5 two text7 three 8 four 9 如何将上面的
  • Dokan 插件为单个订单的客户发送多封电子邮件

    我已经随我的 woocommerce 安装了 Dokan 多供应商插件 如果订单包含不同卖家的产品 它会为单个订单向客户发送多封电子邮件 订单邮件如下 邮寄所有购买的产品 订单中由一位卖家提供的产品 如何防止发送多封邮件 我只需要向客户发送
  • Karma + PhantomJS + 无法访问互联网

    我需要在无法访问互联网的持续集成服务器上使用 PhantomJS 运行 Karma 测试 每个构建都从运行开始npm install no registry进而gruntGrunt Karma 配置为单次运行 singleRun true
  • 当一个 SQL 表同时收到多个更新请求时会发生什么?

    我在 SQL Server 数据库中有一个表 其中记录了用户的最新活动时间 有人可以向我确认一下 当不同用户同时收到多个更新请求时 SQL Server 将自动处理这种情况吗 我预计该表上有 25 50 个并发更新请求 但每个请求负责更新表
  • 完成承诺而不拒绝/解决?

    我有一个等待用户输入的自定义确认对话框 我把它包裹在一个承诺中 当用户选择 是 时我resolve承诺 然而 当用户选择no这并不是真正的错误 而是不应该执行下一个任务 我应该如何处理带有承诺的情况 根本不调用解析 拒绝或者有更好的方法吗
  • iPhone 多点触控与 CorePlot 交互

    我正在开发一个带有核心图图表的 iPhone 应用程序 在一些教程的帮助下 我成功地通过单击和拖动来完成此操作 如何通过多次触摸和拖动来实现它 有人请帮帮我吗 视图控制器 m void viewDidLoad super viewDidLo
  • 在 Travis Public Repository 中如何添加也适用于 Pull 请求的安全变量

    我在公共存储库上有 Travis ci 执行完成后 它会生成一个图像 我想将其上传到 cloudinary com 但它可以是任何其他服务 问题是 要做到这一点 我需要在 travis yml 中添加身份验证令牌 但我不想公开暴露它 为此
  • 如何将 Redux RTK 查询与 Supabase 结合使用

    有谁知道如何将 Supabase 查询模式与 RTK 查询结合使用 例如https dev to sruhleder using react query with supabase a03 https dev to sruhleder us
  • FOSUserBundle 覆盖注册但无法加载类型错误

    我尝试使用 FOSUserBundle 我按照文档中的说明覆盖 Bundle 但是当我尝试在 login 工作时访问 register 时出现此错误 我没有覆盖它 Could not load type app user registrat
  • Vite 开发服务器中的自定义 URL(多页面应用程序)

    我正在构建一个多页面应用程序Vite https vitejs dev 从 Webpack 迁移 要在开发服务器中打开登录页面 我必须转到 localhost 3010 login html 是否可以调整 Vite 配置来提供 login