本篇文档介绍从 Modern.js 2.0 升级到 3.0 时,其他重要的不兼容变更以及相关的迁移说明。
Modern.js 3.0 不再支持使用 webpack 作为构建工具,默认使用 Rspack 作为构建 bundler。Rspack 基于 Rust 实现,构建速度相比 webpack 有显著提升,同时与 webpack 配置高度兼容,大部分配置可以直接迁移。
如果你的项目之前使用了 webpack 特定的配置或插件,需要检查项目中是否有 webpack 相关的自定义配置,并确认使用的 webpack 插件是否有 Rspack 对应版本。
Rspack 与 webpack 配置高度兼容,大部分情况下无需修改即可使用。
Modern.js 3.0 将项目默认入口名称改为 index,默认构建出的 HTML 文件为 index.html。index.html 是大多数 Web 服务器的默认首页文件,无需额外配置。
如果你的项目部署配置中指定了特定的入口文件名,需要更新为 index.html。
Modern.js 3.0 对部分运行时路径别名进行了调整,需要更新相关的导入路径。路径映射对照如下:
| 旧版路径 | 新版路径 | 说明 |
|---|---|---|
@modern-js/runtime/bff | @modern-js/plugin-bff/runtime | BFF 运行时路径 |
@modern-js/runtime/server | @modern-js/server-runtime | 服务端运行时路径 |
Modern.js 3.0 不再支持 Modern.js 1.0 版本引入的 pages 目录的约定式路由,统一使用 routes 目录的约定式路由。
如果你的项目使用了 pages 目录,需要将 src/pages 目录重命名为 src/routes,并更新项目中所有引用 pages 目录的导入路径。详细迁移步骤请参考 约定式路由文档。
Modern.js 3.0 默认使用 React Router v7 作为路由库。React Router v7 相比 v6 只有少量的 不兼容变更。
如果需要使用 React Router v5 或 React Router v6,需要使用自控式路由模式。自控式路由允许你完全控制路由配置,不受 Modern.js 约定式路由的限制。
Modern.js 3.0 不再支持通过 @modern-js/create 创建 Monorepo 项目和 Modern.js Module 项目。
变更内容:
@modern-js/create 创建 Monorepo 项目的功能@modern-js/create 和 modern new 命令创建 Modern.js Module 项目的功能处理方式:
Modern.js 3.0 移除了 modern new 和 modern upgrade 命令,需要按照文档手动操作。
变更内容:
modern new 命令在 Modern.js 3.0 中不再支持,无法通过命令添加入口或启用功能modern upgrade 命令在 Modern.js 3.0 中不再支持,无法通过命令自动升级依赖处理方式:
@modern-js/plugin-bff 插件并在 modern.config.ts 中配置。package.json 中所有 @modern-js/** 包的版本,然后重新安装依赖。详细步骤请参考版本升级文档。移除这些命令的目的是让文档更贴合 AI Agent 的默认实现方式,不把操作做封装,使开发者能够更清晰地了解每个操作的具体步骤,也便于 AI Agent 根据文档直接执行相应的操作。
Modern.js 之前提供了 ESLint 的完整规则集,涵盖了 @modern-js(针对 Node.js 项目的 Lint 规则)和 @modern-js-app(针对前端项目的 Lint 规则)。在 v2.60.0 版本中,我们正式移除了这些规则集。我们鼓励开发者根据自身需求选择合适的代码规范工具,直接使用 ESLint 并结合社区推荐的规则,或使用 Biome 以提升代码格式化的性能。