Modern.js 框架插件开发指南:核心 API 详解
2025-07-08 06:21:13作者:俞予舒Fleming
前言
Modern.js 作为一款现代化的前端开发框架,其插件系统是框架扩展能力的核心。本文将深入解析 Modern.js 插件开发中的关键 API,帮助开发者更好地理解和利用框架的扩展能力。
插件基础结构
在 Modern.js 中,插件的基本结构如下:
import type { CliPlugin } from '@modern-js/core';
export const myPlugin = (): CliPlugin => ({
name: 'my-plugin', // 插件名称
setup(api) { // 插件安装函数
// 在这里使用各种 API
},
});
核心 API 解析
1. 配置获取 API
useConfigContext
作用:获取用户原始配置
const config = api.useConfigContext();
- 返回的是用户在配置文件中编写的原始配置
- 配置对象是只读的,不能直接修改
- 包含 source、output、server 等配置项
典型使用场景:
- 需要读取用户配置进行逻辑判断
- 根据用户配置决定插件行为
useResolvedConfigContext
作用:获取解析后的最终配置
const resolvedConfig = api.useResolvedConfigContext();
- 返回的是经过框架处理后的标准化配置
- 包含
_raw
字段保存原始配置 - 所有配置项都已标准化,带有默认值
与 useConfigContext 的区别:
- 原始配置可能缺少某些字段
- 解析后的配置所有字段都有值
- 解析后的配置更适合插件内部使用
2. 应用上下文 API
useAppContext
作用:获取应用运行时上下文
const appContext = api.useAppContext();
重要字段说明:
字段 | 类型 | 说明 |
---|---|---|
appDirectory | string | 项目根目录 |
srcDirectory | string | 源代码目录 |
distDirectory | string | 构建输出目录 |
packageName | string | package.json 中的名称 |
entrypoints | Entrypoint[] | 入口点信息 |
serverRoutes | ServerRoute[] | 服务端路由信息 |
bundlerType | string | 使用的打包工具类型 |
注意事项:
- 上下文信息是动态变化的
- 不同阶段获取的值可能不同
- 目录相关字段都是绝对路径
3. Hook 执行器 API
useHookRunners
作用:获取 Hook 执行器,触发特定 Hook
const hookRunners = api.useHookRunners();
await hookRunners.afterBuild();
使用建议:
- 谨慎调用内置 Hook
- 主要用于触发自定义 Hook
- 异步 Hook 需要使用 await
最佳实践
-
配置读取:
- 优先使用解析后的配置
- 需要修改配置时使用 config Hook
-
上下文使用:
- 避免缓存上下文对象
- 需要时实时获取最新值
- 注意路径字段在不同环境下的差异
-
Hook 调用:
- 不要随意调用框架内置 Hook
- 异步 Hook 要正确处理 Promise
- 考虑 Hook 的执行顺序
常见问题
Q: 如何修改用户配置? A: 需要通过 config Hook 进行修改,直接修改配置对象无效。
Q: 为什么我的插件获取的目录路径不对? A: 确保在正确的阶段获取上下文,某些目录可能在后期才会创建。
Q: 可以自定义 Hook 吗? A: 可以,通过定义和触发自定义 Hook 实现插件间通信。
总结
Modern.js 的插件 API 设计简洁而强大,通过配置获取、上下文访问和 Hook 机制三个维度提供了完整的扩展能力。理解这些 API 的特性和使用场景,能够帮助开发者编写出更加健壮、灵活的插件。
在实际开发中,建议结合具体需求选择合适的 API,并遵循框架的最佳实践,确保插件的稳定性和兼容性。