Ember 7.0 发布:构建系统全面拥抱 Vite,升级路径与实操指南

2026-06-01 18 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:9 分钟

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 中被正式移除。

这意味着两件事:

  1. 如果你在 6.x 阶段已经处理了所有废弃警告,升级到 7.0 几乎是零成本的——代码不会因为 API 移除而报错。
  2. 如果你忽略了废弃警告继续用旧 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 serveember 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.jsonconfig/environment.jsember-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。


相关推荐