mcpField
M
migrate-to-rspack

migrate-to-rspack

github.com/meteor开发10275 次安装5 天前更新
代码仓库

关于 migrate-to-rspack

面向将现有 Meteor 应用迁移到 Rspack 的开发者,提供分阶段检查指南。内容涵盖版本配对、构建边界及应用级插件替换,同时说明如何保留适用的 Atmosphere 包。

主要功能

  1. 01Meteor 与 Rspack 版本配对
  2. 02入口点与依赖检查
  3. 03客户端依赖图预检
  4. 04构建插件替换指南
  5. 05CI 与生成目录检查

适用场景

  1. 01规划 Meteor 应用首次启用 Rspack
  2. 02升级现有 Rspack 应用至 Meteor 3.6
  3. 03排查客户端依赖图或依赖问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/meteor/agent-skills --skill migrate-to-rspack

安装后在 Claude Code 中输入/migrate-to-rspack确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
client-graph-preflight.md
code-migrations.md
eval-cases.md
framework-and-css.md
rspack-2-upgrade.md
toolchain-compatibility.md
troubleshooting.md
validation-matrix.md

详细介绍

将现有应用迁移到 Rspack

Rspack 编译应用代码;Meteor 构建 Atmosphere 包并组装 bundle。保留这些包,但审查其架构和浏览器依赖。

需要 Meteor 3.4+。建议启用 "meteor": { "modern": true },并先修复 Babel 回退方案。如需设置/辅助工具,请使用 meteor-modern-build-stack。

将 @meteorjs/rspack 与 Meteor 版本匹配,而不是与 @rspack/core 或 @rspack/cli 匹配:

Meteorrspack@meteorjs/rspack能力边界
3.41.0.01.0.0基础集成和辅助工具。
3.4.1 和 3.51.1.02.0.1新增 v2 辅助工具和继承的 TOOL_NODE_FLAGS。
3.5.11.2.02.1.0修订客户端 polyfill 和扩展发现机制。
3.5.21.3.02.2.0依赖诊断、模式隔离、完整应用/TLA 和缓存修复。
3.6-beta.01.4.0-beta360.03.0.0-beta.1Rspack 2.2.0 和支持工作区的安装。
3.6-beta.11.4.0-beta360.13.0.0-beta.2TypeScript 重建循环修复;Node 26.8.2。
3.6-beta.31.4.0-beta360.33.0.0-beta.3Rspack 2.2.7;架构图和测试忽略修复。
3.6-rc.01.4.0-rc360.03.0.0-rc.0Rspack 2 和独立的架构入口。

检查 .meteor/versions、package.json 和锁文件:Atmosphere、Meteor npm 集成和 Rspack 核心版本彼此独立。启用自动安装后,启动时会对齐依赖;请检查并提交这些更改。也可以使用 meteor update --npm。保持版本配对。

已经在使用 Rspack?升级到 Meteor 3.6 beta 或 RC 时,请遵循 Rspack 1 到 2 及其工具链检查。保留有效的条目/配置;跳过下方的首次激活步骤。

决策流程

  1. 应用是否在 package.json 的 meteor.mainModule 中定义了客户端和服务器入口?如果没有,请定义。此项为必需。
  2. 跟踪客户端和客户端测试依赖图。它们是否会到达 CommonJS 导出赋值、Node 内置模块、仅限服务器的本地包入口,或干净检出中缺失的生成输入?如果会,请先修复边界,再激活。参见 references/client-graph-preflight.md。
  3. 应用代码中是否包含嵌套导入(位于 if、函数或其他代码块内的 ES import)?如果有,请将其移至顶层,或转换为动态 import() / require。应用代码必须遵循此要求;Atmosphere 包中可以使用。
  4. 应用是否依赖 Meteor 构建插件(less、fourseven:scss、 coffeescript、zodern:melte、jorgenvatle:vite)?请规划 Rspack loader 替代方案,并在移除前证明能力等效。参见 references/framework-and-css.md。
  5. 应用是否依赖从 CommonJS 包进行裸默认导入 (import x from "some-cjs")?请决定是改写为 import * as x,还是在 .swcrc 中恢复 Meteor 风格的互操作。参见 references/code-migrations.md。
  6. 应用是否仅用于服务器?只设置 mainModule.server。Rspack 仍会 打包服务器;客户端会跳过。
  7. 应用是否将 CSS 或 HTML 放在入口文件夹之外,或导入应用本地 符号链接?请使用 meteor.modules 或 resolve.symlinks: false 保留边界;参见相关文档。
  8. 运行 meteor add rspack,并查看详细的 [Transpiler] 日志,确认是否 仍有 (app) 失败项。

必需:入口

{
  "meteor": {
    "mainModule": {
      "client": "client/main.js",
      "server": "server/main.js"
    },
    "testModule": "tests.js"
  }
}

如果没有 mainModule,Rspack 就没有入口。Meteor 的急切加载模式 不适用:Rspack 不会自动发现模块。有关 CSS 和 HTML 路由,请参见 references/framework-and-css.md。

有关 3.6-beta.3 和 RC 的独立 legacy/native 入口以及早期版本限制,请阅读保留架构。

必需:应用代码中不得有嵌套导入

对应用代码应用嵌套导入改写。 使用返回 Promise 的 import() 时,请调整调用方; Atmosphere 包代码仍由 Meteor 的打包器处理。

必需:预留构建目录

此集成会写入 _build/、public/build-assets/、 public/build-chunks/、private/build-assets/。这些目录会自动添加到 .gitignore。 如果项目已使用其中任何名称,请在 package.json 中重命名:

{
  "meteor": {
    "buildContext": "build",
    "assetsContext": "assets",
    "chunksContext": "chunks"
  }
}

不要编辑这些目录下的任何文件。请将它们排除在 IDE 索引,以及所有递归格式化、lint、类型检查、测试发现和覆盖率扫描之外。.gitignore 不会配置这些工具。

不要在 .meteorignore 或 METEOR_IGNORE 中匹配当前活动的构建上下文。Rspack 会在其中写入面向 Meteor 的入口模块,然后由 Meteor 读取这些模块来组装最终 bundle。审查忽略规则前,先处理已重命名的上下文。

替换构建插件

大多数应用文件构建插件都可以迁移到 Rspack loader。移除插件前,请证明功能对等;将冲突插件的启用与移除作为一个可逆更改。参见 references/framework-and-css.md。

旧插件替代方案
meteor/lessless-loader。参见 references/framework-and-css.md。
fourseven:scsssass-loader + sass-embedded。参见参考文档。脚手架见 meteor create --full。
meteor/coffeescriptcoffee-loader(可选择与 swc-loader 链接)。
zodern:melte(Svelte)官方 Rspack Svelte loader。
jorgenvatle:vite(Vue/Solid)原生 Rspack Vue/Solid loader。
babel-plugin-react-compiler在 3.6 beta 配套方案中使用 SWC;更早的集成保留 Babel。参见框架参考文档。
zodern:typesbundler 迁移期间保留可正常工作的声明提供器;beta.1 原生采用是另一项明确的选择。

仅处理 Atmosphere 包文件的插件可以保留。处理应用文件夹文件(入口文件夹除外)的插件必须迁移到 Rspack。

CommonJS 默认导入互操作

优先使用命名空间导入。有关互操作覆盖及其对整个应用的 CommonJS/tree-shaking 影响,请阅读 references/code-migrations.md。

CI 和 Docker

在本地处理所需的 npm 更新,并提交 package.json 和锁文件。使用现有包管理器执行冻结安装(包含开发依赖),然后构建。 在 [email protected](Meteor 3.5.2)上,meteor.autoInstallDeps: false 仍会报告缺失或过时的依赖项以及手动命令;更早版本的选择退出行为可能会跳过这些检查。检查首个依赖项/配置错误和实际项目根目录,再决定如何修复。参见 references/troubleshooting.md。

反模式

  • 先添加 Rspack,再修复 Babel 回退。使用 "meteor": { "modern": { "transpiler": { "verbose": true } } } 找出它们,并在仍使用仅优化的技术栈时修复。
  • 在 .swcrc 中全局恢复 CJS 互操作,以避免迁移少数导入。这会用真正的 bundle 体积收益换取短期便利。
  • 提交 _build/、public/build-assets/、public/build-chunks/、 private/build-assets/。这些目录会自动生成。
  • 更改发行版本,却不检查与之配套的依赖项,也不提交权威锁文件。请验证干净安装和生产构建。

另请参阅

  • references/eval-cases.md
  • 有关设置、辅助工具和 rspack.config.js API:meteor-modern-build-stack。

评论

支持 Markdown