Ember.js 7.0 发布
速览
Ember.js 正式推出 7.0 版本,这是该前端框架的一次重大更新。新版本旨在提升应用性能和开发体验,引入了多项改进和新特性。此次发布标志着 Ember.js 在现代化前端开发领域的持续演进。
AI 深度解读
Ember.js 7.0 发布深度解读
背景
Ember.js 作为一个成熟的开源前端框架,一直遵循着严格的版本发布策略。Ember 7.0 的发布标志着该项目进入了一个新的维护周期。根据 Ember 的主要版本政策(Major Version Policy),主要版本(Major Version)通常不包含破坏性的大型新功能,而是专注于移除在之前版本中已标记为废弃(Deprecated)的功能,并附带必要的 Bug 修复。
随着 Ember 7.0 的发布,前一个稳定版本 Ember 6.12 正式成为 LTS(Long Term Support,长期支持)版本。Ember 社区一贯的理念是:新特性通常通过次要版本(Minor Releases)发布,以保持向后兼容性,让开发者能够平滑地尝试新功能,从而降低团队进行主要版本升级时的风险和难度。
核心内容
6.x 系列的关键改进回顾
在 Ember 6.x 的迭代过程中,社区和核心团队完成了多项重大技术升级,为 7.0 的发布奠定了基础:
- v2 Addon 标准化:从 Ember 6.1 开始,
ember-source作为 v2 addon 发布,这使得 Embroider 能够直接消费ember-source,提升了构建系统的灵活性和效率。 - 模板标签组件支持:Ember 6.3 引入了对模板标签组件作为路由模板的支持(依据 RFC #1046)。
- 构建系统现代化:Ember 6.8 引入了基于 Embroider 和 Vite 的新应用蓝图(App Blueprint),并默认启用。这是近年来 Ember 项目构建方式的最大变革。
- 严格模式(Strict Mode):Ember 6.8 默认采用
strict-mode(即模板标签,template-tag)组件编写格式,取代了旧的编写方式。 - 独立组件渲染 API:新增了
renderComponentAPI,允许在不加载完整项目的情况下渲染单个组件,极大提升了测试和组件复用的便利性。 - 原生集合类型的追踪版本:Ember 6.8 内置了 JavaScript 原生集合类型的追踪版本,包括
trackedArray、trackedObject、trackedMap、trackedSet、trackedWeakMap和trackedWeakSet,增强了响应式数据管理的原生兼容性。
此外,6.x 周期内还完成了以下重要工程化改进:
- 代码库合并:将
glimmer-vmmonorepo 合并入ember.js,加速渲染引擎的迭代;将router.js仓库合并入ember.js,为新的路由器架构实验和 Route Manager RFC 做准备。 - 发布机制更新:包发布方式更新为通过 OIDC(OpenID Connect)进行,提升了安全性。
- 依赖安全加固:持续更新
broccoli及其他依赖,减少安全漏洞警告(尽管这些警告主要在开发模式下出现,但影响开发体验)。 - 工具链完善:发布了 Glint v2,支持模板标签组件格式的默认化;创建了模板标签 codemod 和 Vite codemod 以辅助迁移;提供了遗留的经典蓝图(Classic Blueprint)以支持不愿立即迁移构建系统的用户。
如何升级到 Ember 7.0
Ember 7.0 本身不引入新的公共 API,也不引入新的废弃警告。它主要移除了在 6.10 之前引入并计划在 7.0 移除的所有废弃功能。
升级路径建议:
- 直接升级(推荐):如果应用当前版本较新,建议先将应用升级到 Ember 6.12(6.x 系列的最新补丁版本),解决所有废弃警告,然后再升级到 7.0。
- 命令示例:
npx ember-cli-update --to 6.12 - 注意:跨越 6.8 版本边界时,由于构建系统的变更,需要调整
ember-cli的配置。
- 命令示例:
- 分步升级:如果应用版本较早(如 6.4 之前),建议按顺序通过 LTS 版本逐步升级:6.4 -> 6.8 -> 6.12 -> 7.0。
具体步骤:
- 尽可能将应用使用的 Addon 升级到最新版本,以减少依赖中的废弃 API 使用。
- 将项目升级到 Ember 6.12 的最新补丁版本。
- 确保应用构建成功。
- 解决所有废弃警告(Deprecation Warnings)。这些废弃的 API 将在 7.0 中被移除。如果依赖项使用了废弃 API,可能需要升级这些依赖。可使用
ember-cli-deprecation-workflow隔离单个废弃警告以便逐步处理。 - 确保应用构建成功且测试套件通过,无废弃警告。
- 升级到 Ember 7.0。
- 命令示例:
npx ember-cli-update --to 7.0
- 命令示例:
Ember 7.0 移除的具体功能
Ember 7.0 移除了以下在 6.x 期间被废弃的功能:
- 移除
import Ember from 'ember':不再支持从ember包导入整个命名空间。开发者需迁移到具体的 API 导入方式。 - 移除 AMD 包发布:
ember-source不再发布 AMD 格式的包。在 7.0 之前,可以通过可选功能(optional feature)选择启用,但 7.0 中默认移除。这需要相应的依赖更新。 - 移除
injectAPI:不再支持从@ember/service导入inject。现在统一使用import { service } from '@ember/service'。
主要 Bug 修复
Ember 7.0 包含多项重要的 Bug 修复,包括:
- 支持严格模式下的运行时模板编译器默认全局变量(RFC #1070)。
- 在运行时模板编译器中支持显式作用域内的
this。 - 修复
LinkTo在内联 SVG 中导致应用重载的问题。 - 修复绑定到空字符串的单选/复选框输入缺少
value属性的问题。 - 修复
tracked集合的delete()方法对不存在的条目返回true的问题。 - 修复
{{#each}}在数组包含带键的 null/undefined 项时的运行时崩溃。 - 修复访问辅助函数位置参数负索引时的崩溃。
- 修复
trackedMap和trackedWeakMap对现有键的响应性问题。 - 修复
BrandedArray在 destroyables 中作为父数组的 Bug。 - 修复
EmberArray.reduce以匹配原生行为。 - 修复销毁后清除过时的元数据引用,以允许垃圾回收(GC)。
- 修复
<LinkTo>的@current-when参数在处理包含动态段落的嵌套路由时的问题。
Ember CLI v7.0
Ember CLI 7.0 同样不引入新的公共 API、新的废弃警告或新的 Bug 修复。它仅自动移除了 6.x 周期中之前废弃的公共 API。相关代码将在未来的版本中进一步清理。
关键要点
- 无新功能,重在清理:Ember 7.0 是一个“清理型”版本,核心目标是移除在 6.x 周期中废弃的 API,而非引入破坏性新功能。
- LTS 版本更替:Ember 6.12 成为新的长期支持(LTS)版本,建议生产环境用户关注此版本的稳定性。
- 现代化构建体验已成默认:自 6.8 起,基于 Embroider 和 Vite 的构建系统以及严格模式(模板标签)已成为新项目的默认配置,标志着 Ember 开发体验的全面现代化。
- 升级策略:推荐先升级至 6.12 并解决所有废弃警告,再升级至 7.0。早期版本用户需分步升级。
- API 迁移重点:开发者需重点处理 `
