一个支持 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>
相关推荐
倾听醉梦语1 天前
React/Vite/Next.js 前端开发工具 SpotPatch:点击页面元素精准定位 JSX/TSX 源码
javascript·react·ai编程·vite·next.js·前端开发工具
小锋java12344 天前
【技术专题】Vue3 - 列表渲染
vue.js·vite
小锋java12346 天前
【技术专题】Vue3 - 条件渲染
vue.js·vite
java1234_小锋9 天前
Vue3+Vite简介以及构建第一个HelloWorld实例
前端·javascript·vue.js·vite
万亿少女的梦1689 天前
基于Vue、Vite与CesiumJS的江西省铜矿资源WebGIS系统设计
vue·vite·cesiumjs·webgis·空间数据可视化
NutShell Wang10 天前
Vite 8.1 深度拆解:Rolldown 统一打包器如何终结前端构建的「双引擎时代」
前端·rust·开源·vite·开发者工具·vibe coding
PedroQue9914 天前
Vite插件v1.1.0发布:自动导入全面重构
前端·vite
YFF菲菲兔15 天前
Environment API 总述
vite
至乐活着15 天前
Vite 构建工具原理解析与实战:从 ES Module 到极速 HMR
vite·热更新·构建工具·前端工程化·es module
linsk199815 天前
React18、19如何兼容 IE9、IE10
react·rollup·vite·兼容·ie