一个支持 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>
相关推荐
深念Y4 天前
07-SSR水合问题实战排查与修复记录
前端·vue·vite·nuxt·ssr·csr·水合
进哥AI研习社5 天前
构建工具链深度配置——Vite/SWC 与 Tree Shaking 调优
rollup·vite·构建工具·swc·代码分割·esbuild·tree shaking
PedroQue995 天前
v1.4.0:新增 defineUniPage 宏声明页面配置,架构全面重构
前端·vite
xiaohe06016 天前
🤔 v-mortal 是什么?!我只知道 v-model 啊!
vue.js·vite·前端工程化
YIAN7 天前
告别等后端!React+Vite 前端独立开发全流程:接口封装 + Mock 方案 + 状态管理
前端·react.js·vite
PedroQue997 天前
@meng-xi/vite-plugin v1.3.0:generateUni 一键流水线
前端·vite
PedroQue998 天前
Vite 1.2.0发布:自动生成pages.json
前端·vite
sir.山12 天前
在 Vue 3 项目中使用 Mock 数据
前端·vue.js·vue3·vite
嘟嘟071713 天前
JWT 登录认证完整流程(React + Vite 实战复习)
react.js·vite
xyphf_和派孔明15 天前
Vite 与 Webpack 对比及常见面试题
前端·webpack·vite