这是面向 Meteor 2.x 升级到 3.x 的迁移技能,核心背景是 Meteor 3 移除了 Fibers,服务端 Mongo API 变为异步,模块系统强制严格模式,客户端异步代码中的响应式需要特别处理,Atmosphere 包常需 fork 或替换。
推荐策略是分阶段进行,不要先切换框架版本标志。先把项目更新到最新 2.x,并用 WARN_WHEN_USING_OLD_API=true meteor run 运行,日志会列出需要异步化改写的同步 API 调用。仍在 2.x 时就把服务端同步 Mongo 调用迁移到 *Async 版本,并沿调用链追踪每个改动函数:需要消费返回值处 await,刻意转发 Promise,重构只能同步的边界,止于支持异步的框架边界。社区有 jscodeshift codemod 可自动化简单情况,但会漏掉非标准集合导入,需人工审阅差异并核查回调的 Promise 归属与集合参数形态。
还要审计 Atmosphere 包,寻找替代或 fork 过时包,并固定 api.versionsFrom(['2.x', '3.0']),保存 .meteor/versions 与 npm lockfile 检查点。随后升级到目标 3.x 版本,清理隐式全局变量改为 const 或 export/import,审计 Blaze helper 和 Tracker.autorun 中 await 后丢失的响应式,把含 await 的 forEach/map/filter 换成 for...of 或 Promise.all。
需审计使用内部游标 API 的发布、读取 invocation this 的框架处理器、TypeScript 项目的类型声明来源(3.6-beta.1 起通过 meteor types 原生开启)、React 项目是否采用 Suspense 感知的 react-meteor-data 导入。文档还提供基于报错症状的索引,如 findOne is not a function、隐式全局 ReferenceError、Blaze 不更新、发布丢失 this.userId、WebApp 中间件不触发等,并列出反模式与参考文件。具体命令与案例细节以原文为准。