一个支持 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>
相关推荐
用户9714171814273 小时前
前端开发中的跨域问题:Vite 开发环境配置指南
vue.js·vite
kuromiluu3 小时前
从原理到实践:Vite
vite
菜市口的跳脚长颌1 天前
一个 Vite 打包配置,引发的问题—— global: 'globalThis'
前端·vue.js·vite
苏卫苏卫苏卫5 天前
【码源】智能无人仓库管理系统(详细码源下~基于React+TypeScript+Vite):
前端·react.js·typescript·vite·项目设计·智能无人仓库管理系统·码源
前端赵哈哈8 天前
Vite 构建后产品详情页图片失效?从路径匹配到映射表的完美解决
前端·vue.js·vite
念念不忘 必有回响9 天前
nginx前端部署与Vite环境变量配置指南
前端·nginx·vite
我爱甜妹12 天前
vite项目保存代码后不刷新页面 vite热更新
vite
jason_yang13 天前
vue3+element-plus按需自动导入-正确姿势
vue.js·vite·element
WujieLi15 天前
初识 Vite+:一文了解 Rust 驱动的新一代前端工具链
javascript·rust·vite
却尘15 天前
Vite 炸裂快,Webpack 稳如山,Turbopack 想两头要:谁才是下一个王?
前端·面试·vite