一个支持 Vite 在一个 html 文件里面引入多个 js 入口文件的插件

github 地址: github.com/noahlam/vit...

介绍

支持 Vite 打包/开发时, 一个 HTML 文件里存在多个 JS(TS) 入口, 并且都可以被构建, 最终构建产物放在同一个目录下.

使用

安装

shell 复制代码
npm i vite-plugin-multiple-entries -D
yarn add vite-plugin-multiple-entries -D
pnpm add vite-plugin-multiple-entries -D

文件引入

js 复制代码
export default defineConfig({
  plugins: [
    multipleEntryFilePlugin({
      chunkName: 'other',
      entryPath: resolve('./other.ts'),
      injectTo: 'body-prepend',
    }),
  ],
});

参数说明

chunkName

类型: string

默认值:

必填:

说明: 入口名称, 会影响最终产物的文件名

entryPath

类型: string

默认值:

必填:

说明: 入口文件路径

entryFileName

类型: string

默认值:

必填:

说明: 同 rollupOptions.output.entryFileNames 配置, 会影响最终产物的文件名, 作用是当指定了 rollupOptions.output.entryFileNames 时, 所有的入口文件都会被这个规则覆盖. 导致所有入口文件名除了 hash 不一样外, 其他的都一样. 指定 entryFileName 可以为当前 entry 指定一个单独的文件名规则.

crossorigin

类型: string

默认值:

必填:

说明: 注入的 script 标签是否需要加 crossorigin 字段

示例:

js 复制代码
export default defineConfig({
  plugins: [
    multipleEntryFilePlugin({
      chunkName: 'other',
      entryPath: resolve('./other.ts'),
      crossorigin: 'anonymous',
    }),
  ],
});
html 复制代码
<!doctype html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="x-dns-prefetch-control" content="on" />
    <script type="module" crossorigin src="/assets/index-22c3b48c.js"></script>
  </head>
  <body>
    <script src="assets/other-cc41acd1.js" crossorigin="anonymous"></script>
    <div id="app"></div>
  </body>
</html>

injectTo

类型: 'head' | 'body' | 'head-prepend' | 'body-prepend'

默认值: head-prepend

必填:

说明: 注入位置, 会影响最终产物在 HTML 中的位置

insertPlaceholder

类型: string

默认值:

必填:

说明: 插入占位符, 最终会被替换成 script 标签, 需要确保在 HTML 文件里有该内容

示例:

html 复制代码
<!doctype html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <!-- other script placeholder -->
    <meta http-equiv="x-dns-prefetch-control" content="on" />
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="index.ts"></script>
  </body>
</html>
javascript 复制代码
export default defineConfig({
  plugins: [
    multipleEntryFilePlugin({
      chunkName: 'other',
      entryPath: resolve('./other.ts'),
      insertPlaceholder: '<!-- other script placeholder -->',
    }),
  ],
});

构建结果:

html 复制代码
<!doctype html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="/assets/other-cc41acd1.js"></script>
    <meta http-equiv="x-dns-prefetch-control" content="on" />
    <script type="module" crossorigin src="/assets/index-22c3b48c.js"></script>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
相关推荐
向北丶6 天前
vite项目中配置alias别名
前端·vite
PedroQue996 天前
修复 .uvue 页面路径残留问题
前端·vite
梦曦i7 天前
修复 .uvue 页面路径残留问题
前端·vite
cindershade10 天前
首屏在替谁付费:重做 Vite 产物治理的责任边界
vite
做前端的娜娜子11 天前
施工蓝图:vite.config.js —— 项目的指挥中心
前端·react native·vite
D_jing2013 天前
【踩坑解决】pnpm+Vite引入@koi/core报错spark-md5找不到模块(幽灵依赖深度解析)
pnpm·vite·幽灵依赖·前端踩坑
Flynt13 天前
pnpm 12 换上了 Rust 内核,我拿项目实测了一轮构建速度
rust·vite·前端工程化
xiaoyan201513 天前
2026最新款Electron41+React19+AntDesign电脑端后台管理系统Exe
react.js·electron·vite
梨想橙汁13 天前
Vite 优化、踩坑汇总 + Webpack 迁移 Vite 实战
前端·webpack·vite
猫不易14 天前
Webpack 与 Vite:从 Loader / Plugin 到 Rolldown 统一引擎
前端·vite