全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 22 道配套习题

插件开发原理与实践专题

专题说明

本专题深入介绍 Vite 插件开发原理,帮助开发者掌握自定义插件开发技能。

学习目标

  1. 理解 Vite 插件钩子的完整机制
  2. 掌握 resolveId、load、transform 钩子编写
  3. 学会插件性能优化技巧

学习内容

  • 插件钩子机制:完整钩子列表与触发时机
  • 编写 resolveId 钩子插件:模块 ID 解析
  • 编写 load 钩子插件:模块内容加载
  • 编写 transform 钩子插件:模块内容转换
  • 插件过滤与性能优化:高效插件实现

学习建议

从简单的 transform 插件开始,逐步理解钩子机制,开发实用插件。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(17 题)

1
单选题

Vite 插件的 config 钩子在哪个阶段执行?

A

构建生产产物时

B

配置文件加载后、服务器启动前

C

模块转换过程中

D

热更新触发时

2
多选题

Vite 插件的核心钩子有哪些?

A

config - 配置修改钩子

B

transform - 模块转换钩子

C

load - 模块加载钩子

D

resolveId - 模块路径解析钩子

3
多选题

Vite 插件钩子的执行阶段如何区分?

A

服务阶段:dev server 启动时执行的钩子

B

构建阶段:生产构建时执行的钩子

C

钩子可通过 apply 属性限制执行阶段

D

所有钩子在两个阶段都会执行

4
单选题

Vite 插件对 Rollup 钩子的兼容方式是什么?

A

Vite 插件不能使用 Rollup 钩子

B

Vite 在构建阶段直接传递 Rollup 钩子

C

需要单独配置 Rollup 插件

D

Vite 重写了所有 Rollup 钩子

5
多选题

以下哪些 Rollup 钩子可以在 Vite 插件中使用?

A

generateBundle - 产物生成钩子

B

writeBundle - 写入文件钩子

C

closeBundle - 构建结束钩子

D

options - Rollup 配置钩子

6
多选题

Vite 插件中 Rollup 钩子与 Vite 特有钩子的区别有哪些?

A

Rollup 钩子只在生产构建时执行

B

Vite 特有钩子在开发服务器时也执行

C

transform 钩子在两个阶段都执行

D

config 钩子只在构建时执行

7
单选题

transform 钨子的参数包含哪些信息?

A

只有模块内容字符串

B

模块内容和模块路径

C

模块内容、路径和配置对象

D

模块内容、路径和描述符对象

8
多选题

编写 transform 钩子插件时需要注意哪些事项?

A

使用 createFilter 限制处理的文件范围

B

返回 null 表示不处理该模块

C

返回对象可包含 map(Source Map)

D

避免 SSR 场景下的非浏览器 API 调用

9
单选题

load 钩子与 transform 钩子的主要区别是什么?

A

load 处理文件读取,transform 处理内容转换

B

load 只处理 JS 文件,transform 处理所有文件

C

load 在 transform 之后执行

D

load 不能返回内容

10
多选题

load 钩子插件可以实现哪些功能?

A

创建虚拟模块,返回动态生成的内容

B

阻止默认文件加载,返回 null

C

从网络或其他来源加载模块内容

D

在加载时注入环境变量

11
多选题

创建虚拟模块时,load 和 resolveId 钩子如何配合?

A

resolveId 捕获虚拟模块 ID 并返回解析结果

B

load 根据解析结果返回虚拟模块内容

C

虚拟模块 ID 通常以 virtual: 或 \0 开头

D

需要配置 enforce: 'pre' 确保优先执行

12
单选题

resolveId 钩子的作用是什么?

A

读取模块文件内容

B

将导入路径解析为实际模块 ID

C

转换模块代码

D

生成模块 Source Map

13
多选题

resolveId 钩子可以实现哪些自定义解析功能?

A

将裸模块名映射到特定路径

B

创建虚拟模块的解析结果

C

处理特殊的导入语法(如 ?raw、?url)

D

添加额外的导入路径

14
多选题

resolveId 钩子的返回值可以包含哪些信息?

A

id - 解析后的模块路径或 ID

B

external - 标记为外部依赖

C

moduleSideEffects - 是否有副作用

D

resolvedBy - 标记解析来源

15
单选题

createFilter 函数的作用是什么?

A

过滤配置选项

B

创建文件路径匹配过滤器

C

过滤构建产物

D

筛选依赖包

16
多选题

插件性能优化的策略有哪些?

A

使用 createFilter 限制处理文件范围

B

缓存转换结果避免重复处理

C

避免在钩子中进行同步 IO 操作

D

使用 enforce 控制钩子执行顺序

17
多选题

插件钩子的 enforce 属性有哪些值?

A

'pre' - 在核心插件之前执行

B

'post' - 在核心插件之后执行

C

不设置则按注册顺序执行

D

'normal' - 正常顺序执行

← 上一个专题 微前端与模块联邦专题
下一个专题 → 插件系统专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库