Vite 支持本地文件打开,用于构建前端本地小工具

有时候做一些简单的前端小工具,需要本地直接打开。使用 Vite 创建的项目默认不支持直接打开,记录一下解决方式。

修改构建产物

首先要在 vite 配置文件后配置 base: './'

此外,还要修改打包后的文件:

  • script 有 type="module" crossorigin,把它们改为 defer 。
  • link 有 rel="stylesheet" crossorigin ,把 crossorigin 移除掉。

可以编写 node.js 脚本,或者自定义一个 vite 插件,把它们批量替换:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'

const removeModuleAndCrossorigin = () => {
  return {
    name: "remove-module-and-crossorigin",
    transformIndexHtml(html: string) {
      return html
        .replaceAll('type="module" ', "defer ")
        .replaceAll('crossorigin ', "")
    }
  }
}

// https://vite.dev/config/
export default defineConfig({
  base: './',
  plugins: [react(), removeModuleAndCrossorigin()],
})

如果用到了 import 图片获取图片地址,还会报 Cannot use 'import.meta' outside a module ,避免这种方式引用。

打包为一个文件

通过 vite-plugin-singlefile 这个工具,可以把所有代码打包到一个 html 文件里。这样会使体积变大,但更适合线下分发。

https://www.npmjs.com/package/vite-plugin-singlefile

vite.config.ts 中配置:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'

import { viteSingleFile } from "vite-plugin-singlefile"

// https://vite.dev/config/
export default defineConfig({
  plugins: [react(), viteSingleFile()],
})