Modern.js 提供了一套强大的插件体系,允许开发者通过编写插件来扩展框架功能、定制构建流程,以及满足各种个性化的开发需求。无论你是想添加一个自定义命令、优化构建产物,还是实现一套独特的部署方案,Modern.js 的插件系统都能为你提供强大的支持。
在 Web 应用开发中,我们经常会遇到一些框架本身无法直接满足的需求,例如:
.xyz
。在没有插件系统的情况下,这些需求可能需要修改框架源码,或者采用一些繁琐的 hack 手段。而 Modern.js 的插件系统提供了一种优雅、灵活且可维护的解决方案。
Modern.js 提供了两种主要的插件类型:Modern.js 框架插件和 Rsbuild 构建插件。选择哪种插件取决于你的具体需求:
Rsbuild 构建插件: 如果你的需求与构建过程密切相关,特别是涉及到 Webpack 或 Rspack 配置的修改,那么你应该选择 Rsbuild 插件。例如:
loader
或 plugin
配置。Modern.js 框架插件: 如果你的需求与 Modern.js 框架本身的功能扩展、运行时行为或服务端逻辑相关,那么你应该选择 Modern.js 插件。例如:
简单来说,需要修改 Webpack/Rspack 配置时,使用 Rsbuild 插件;其他与框架相关的功能扩展,使用 Modern.js 插件。
Modern.js 框架插件可以细分为三类,分别是:
CLI 插件用于在应用执行 modern
命令时提供额外功能,例如添加命令、修改配置、监听文件等。大部分构建相关能力均可通过 CLI 插件实现。
CLI 插件可通过 modern.config.ts
中的 plugins
字段进行配置。
Runtime 插件用于在应用运行 React 代码时提供额外功能,例如执行初始化行为、实现 React 高阶组件(HOC)封装。
Runtime 插件通过 src/modern.runtime.ts
中的 plugins
字段配置。
Modern.js 从 2.66.0
起正式对外使用新的插件机制。
如果你的当前版本低于 2.66.0,可通过执行 npx modern upgrade
进行升级。
如果你需要开发 Modern.js 框架插件,请阅读 Modern.js 插件系统 获取更多信息。
Rsbuild 是 Modern.js 底层的构建工具,通过添加 Rsbuild 插件可修改默认的构建行为,添加各类额外功能,包括但不限于:
你可以在 modern.config.ts
中通过 builderPlugins
选项注册 Rsbuild 插件,详见 builderPlugins 构建插件。
Modern.js 从 2.46.0
起,底层构建工具升级为 Rsbuild。
如果你的当前版本低于 2.46.0,可通过执行 npx modern upgrade
进行升级。
可以阅读 Rsbuild 官网 - 插件 了解更多 Rsbuild 插件体系内容。
以下为已在 Modern.js 中内置的 Rsbuild 官方插件,无需安装,即可启用:
插件 | 介绍 | Modern.js 链接 |
---|---|---|
React 插件 | 提供对 React 的支持 | - |
SVGR 插件 | 支持将 SVG 图片转换为一个 React 组件 | output.disableSvgr output.svgDefaultExport |
Styled Components 插件 | 提供对 styled-components 的编译时支持 | tools.styledComponents |
Assets Retry 插件 | 用于在静态资源加载失败时自动发起重试请求 | output.assetsRetry |
Type Check 插件 | 用于在单独的进程中运行 TypeScript 类型检查 | output.disableTsChecker tools.tsChecker |
Node Polyfill 插件 | 用于注入 Node 核心模块在浏览器端的 polyfills | output.disableNodePolyfill |
Source Build 插件 | 用于 monorepo 场景,支持引用其他子目录的源代码,并完成构建和热更新 | experiments.sourceBuild |
Check Syntax 插件 | 用于分析产物的语法兼容性,判断是否存在导致兼容性问题的高级语法 | security.checkSyntax |
CSS Minimizer 插件 | 用于自定义 CSS 压缩工具,切换到 cssnano 或其他工具进行 CSS 压缩 | tools.minifyCss |
Pug 插件 | 提供对 Pug 模板引擎的支持 | tools.pug |
Rem 插件 | 用于实现移动端页面的 rem 自适应布局 | output.convertToRem |
YAML 插件 | 用于引用 YAML 文件,并将其转换为 JavaScript 对象 | YAML 文件 |
TOML 插件 | 用于引用 TOML 文件,并将其转换为 JavaScript 对象 | TOML 文件 |
以下是未在 Modern.js 中内置的 Rsbuild 官方插件:
Image Compress 插件:将项目中用到的图片资源进行压缩处理。
Stylus 插件:使用 Stylus 作为 CSS 预处理器。
UMD 插件:用于构建 UMD 格式的产物。