← 返回信息流
AI 资讯Hacker News·5 天前

Ember.js 7.0 发布

原标题: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:新增了 renderComponent API,允许在不加载完整项目的情况下渲染单个组件,极大提升了测试和组件复用的便利性。
  • 原生集合类型的追踪版本:Ember 6.8 内置了 JavaScript 原生集合类型的追踪版本,包括 trackedArraytrackedObjecttrackedMaptrackedSettrackedWeakMaptrackedWeakSet,增强了响应式数据管理的原生兼容性。

此外,6.x 周期内还完成了以下重要工程化改进:

  • 代码库合并:将 glimmer-vm monorepo 合并入 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 移除的所有废弃功能。

升级路径建议:

  1. 直接升级(推荐):如果应用当前版本较新,建议先将应用升级到 Ember 6.12(6.x 系列的最新补丁版本),解决所有废弃警告,然后再升级到 7.0。
    • 命令示例:npx ember-cli-update --to 6.12
    • 注意:跨越 6.8 版本边界时,由于构建系统的变更,需要调整 ember-cli 的配置。
  2. 分步升级:如果应用版本较早(如 6.4 之前),建议按顺序通过 LTS 版本逐步升级:6.4 -> 6.8 -> 6.12 -> 7.0。

具体步骤:

  1. 尽可能将应用使用的 Addon 升级到最新版本,以减少依赖中的废弃 API 使用。
  2. 将项目升级到 Ember 6.12 的最新补丁版本。
  3. 确保应用构建成功。
  4. 解决所有废弃警告(Deprecation Warnings)。这些废弃的 API 将在 7.0 中被移除。如果依赖项使用了废弃 API,可能需要升级这些依赖。可使用 ember-cli-deprecation-workflow 隔离单个废弃警告以便逐步处理。
  5. 确保应用构建成功且测试套件通过,无废弃警告。
  6. 升级到 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 中默认移除。这需要相应的依赖更新。
  • 移除 inject API:不再支持从 @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 项时的运行时崩溃。
  • 修复访问辅助函数位置参数负索引时的崩溃。
  • 修复 trackedMaptrackedWeakMap 对现有键的响应性问题。
  • 修复 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 迁移重点:开发者需重点处理 `
查看原文 →blog.emberjs.com