Ember.js 在 2026 年 5 月 29 日正式推出 7.0。这个版本没有铺天盖地的新 API,也没有颠覆性的架构重写——它做的是一件更务实的事:把 6.x 周期里标记废弃的功能全部清掉,同时把构建系统从 Ember CLI 的传统管线彻底切换到 Vite。对于已经在 6.x 上跑项目的团队来说,这意味着升级成本可控,但构建工具的变更需要认真对待。
7.0 的核心变更:不是加法,是减法
Ember 的大版本升级哲学一直很明确——只有经过完整小版本周期验证的变更才会进入大版本。7.0 本质上是一次"收割":6.x 里已经标记为废弃(deprecation)的 API,在 7.0 中被正式移除。
这意味着两件事:
- 如果你在 6.x 阶段已经处理了所有废弃警告,升级到 7.0 几乎是零成本的——代码不会因为 API 移除而报错。
- 如果你忽略了废弃警告继续用旧 API,7.0 会直接让那些调用失效。
典型的被移除项包括旧版组件生命周期钩子(如 didInitAttrs)、经典 Ember Data 的某些适配器用法、以及部分已由 @tracked 替代的观察者模式 API。具体清单在 Ember 官方废弃指南中有逐项列出。
构建系统:从 Ember CLI 到 Vite
7.0 最具实质性的架构变动是构建系统全面转向 Vite。过去 Ember 项目的构建由 ember-cli 内部的 broccoli 管线驱动,这套管线稳定但偏慢,尤其在开发模式下热更新的响应速度不如 Vite 的原生 ESM 方案。
切换到 Vite 后:
- 开发服务器启动速度显著提升,Vite 利用浏览器原生 ES 模块加载,不再需要全量打包后才能启动。
- 热模块替换(HMR)更即时,修改组件模板或样式后几乎秒级反映到浏览器。
- 生产构建仍然走 Rollup(Vite 的生产打包器),输出结构与之前兼容,部署流程不需要大改。
需要注意的是,ember-cli 作为项目脚手架和命令入口仍然存在,只是底层构建引擎换了。你仍然用 ember serve、ember test 这些命令,但背后跑的是 Vite。
6.12 成为新 LTS:稳定派的落脚点
伴随 7.0 发布,Ember 6.12 被正式指定为新的 LTS(长期支持)版本。LTS 版本只接收安全补丁和关键 bug 修复,不引入新功能,适合需要长期稳定运行、不频繁升级的生产项目。
如果你当前在 6.x 的早期版本(比如 6.4 LTS),升级路线是:
6.4 LTS → 6.12 LTS(先解决 6.4~6.12 期间的废弃警告)→ 7.0(再解决 6.12~7.0 期间的废弃警告)
不要从 6.4 直接跳到 7.0——中间跨越的废弃项太多,排查成本不可控。
升级实操:从 6.12 到 7.0
下面是一套可执行的升级流程。假设你的项目已经在 Ember 6.12 上运行,且所有废弃警告已处理完毕。
第一步:升级 ember-cli 和核心依赖
# 在项目根目录执行
npx ember-cli-update --to 7.0
# 如果你想先看看会改什么,加 --dry-run
npx ember-cli-update --to 7.0 --dry-run
ember-cli-update 会自动处理 package.json、config/environment.js、ember-cli-build.js 等配置文件的变更,包括 Vite 相关的配置迁移。
第二步:检查 Vite 配置文件
7.0 项目不再使用 ember-cli-build.js,而是采用 vite.config.js。迁移工具会生成基础配置,但你可能需要根据项目情况微调:
// vite.config.js — Ember 7.0 项目的基础配置
import { defineConfig } from 'vite';
import ember from '@ember/vite-plugin';
export default defineConfig({
plugins: [
ember({
// 如果项目有自定义 template 编译需求,在此配置
templateCompiler: {
plugins: [],
},
}),
],
resolve: {
alias: {
// 保留项目中已有的路径别名
'@app': '/src',
'@components': '/src/components',
},
},
build: {
// 生产构建输出目录,默认与旧版 ember-cli 兼容
outDir: 'dist',
},
server: {
port: 4200, // 保持 Ember 开发者习惯的端口
},
});
第三步:清理残留废弃代码
即使你在 6.12 上处理了废弃警告,升级后仍建议跑一遍完整测试:
# 运行全量测试
ember test
# 如果用 CI,可以并行跑
ember test --parallel
重点关注以下几类可能遗漏的废弃用法:
- 模板中的旧语法(如
{{action}}助手,应替换为{{on}}修饰器) - 经典风格组件(
Ember.Component.extend)中对已移除生命周期钩子的调用 - Ember Data 中
RESTAdapter的某些默认行为变更
第四步:验证开发体验
启动开发服务器,确认 Vite 的 HMR 正常工作:
ember serve
# 浏览器打开 http://localhost:4200
# 修改任意组件模板,观察是否即时更新
如果 HMR 不生效,检查 vite.config.js 中 @ember/vite-plugin 的配置是否完整,以及 package.json 里是否残留了旧版 broccoli 相关依赖(应该已被移除)。
升级决策清单
在决定是否升级到 7.0 之前,用这张清单快速评估:
| 条件 | 建议 |
|---|---|
| 项目在 6.12 上且所有废弃警告已清零 | 直接升级,成本最低 |
| 项目在 6.12 上但有未处理的废弃警告 | 先清警告再升级,否则会大面积报错 |
| 项目在早期 6.x(如 6.4 LTS) | 先升到 6.12 LTS,清完废弃后再升 7.0 |
| 项目需要长期稳定、不频繁变动 | 停在 6.12 LTS,暂不升级 |
| 项目有大量自定义 broccoli 插件 | 评估这些插件是否有 Vite 对应方案,再决定升级时机 |
写在最后
Ember 7.0 的发布方式体现了这个框架一贯的性格:不追风口,不搞噱头,把已经验证的变更稳稳地落地。构建系统切换到 Vite 是这次升级中最值得关注的实质性改动——它改变了开发时的体验节奏,但不改变生产部署的输出形态。对于已经在 6.x 上保持废弃警告清零的团队,升级几乎是无痛的;对于还在早期版本上积累了不少旧代码的项目,6.12 LTS 是一个合理的落脚点,不必急于追赶 7.0。