核心现代化以提升安全性和性能
在我们最新的重大版本发布中,TinaCMS 正在进行重要的架构转变:我们将仅支持 ES 模块 (ESM),并结束对 CommonJS (CJS) 的支持。
这是一次必要的现代化,使 TinaCMS 与 JavaScript 生态系统的未来保持一致,确保更好的安全性、更新的依赖项和更流畅的开发者体验。
我们为何转向 ESM
多年来,JavaScript 社区一直在从 CommonJS (require) 过渡到 ES 模块 (import/export)。虽然支持两者(双模式)长期以来一直是标准,但这通常导致“依赖地狱”、臃肿的包和被过时的 CJS 包阻止的安全漏洞。
通过转向纯 ESM,我们解决了三个关键痛点:
- 安全性和漏洞: 停留在 CommonJS 上迫使我们保留某些依赖项的旧版本。通过转向 ESM,我们解锁了升级这些包的能力,大大减少了我们的漏洞足迹。
- 生态系统兼容性: 开源世界中的许多关键库(如
micromark和hast)已经转向纯 ESM。此更新允许 TinaCMS 与现代工具进行本地交互,而无需复杂的构建变通方案。 - 现代构建系统: 此更改简化了我们的构建管道,消除了由不一致的模块系统引起的混乱。
有哪些变化?
1. 更新的依赖项(Mermaid 等)
此迁移的直接好处之一是能够升级 Mermaid。以前,我们被锁定在旧版本,因为新版本仅支持 ESM。通过此更新,我们已将 Mermaid 升级到最新版本,确保您在编辑器中的图表更快、更稳定且功能丰富。
2. 解决自托管的复杂性
将 CMS 迁移到 ESM 不仅仅是更改文件扩展名。我们的团队进行了大量工作,以确保自托管设置保持稳健。
- 数据库打包: 我们解决了 CLI 错误地打包用户数据库文件 (
database.ts) 的问题。系统现在正确处理临时输出文件,以确保 Node.js 将其视为 ESM。 - 填充: 我们实现了
esbuild横幅来填充require,以确保即使您的某些底层数据库驱动程序仍使用 CJS,它们也能在新的 ESM 环境中正常运行。
3. 生态系统的稳定性
我们知道架构变更可能令人生畏。为了确保平稳过渡,我们对整个启动模板和常见配置套件进行了严格测试。
无论您使用的是元框架、静态网站生成器还是自定义自托管设置,我们都已验证构建、开发环境和生产部署保持稳定和高效。
升级路径
要升级到仅支持 ESM 的 TinaCMS 版本,您需要更新您的包版本。
npm install tinacms@latest @tinacms/cli@latest
重大变更
由于我们已放弃对 CommonJS 的支持,您必须确保您的项目使用 ESM 语法。
- 检查您的导入: 确保您在 Tina 配置文件中使用
import而不是require。 - 类型配置: 如果您运行期望 ESM 的脚本,请确保您的
package.json包含"type": "module",或者确保您的配置文件在适当的地方使用.ts/.mjs扩展名。
展望未来
这次迁移是一个艰巨的任务,但它清除了构建下一代 TinaCMS 功能所需的技术债务。通过标准化 ESM,我们现在可以更快地行动,发布更小的包,并保持您的内容基础设施安全。
一如既往,如果您在迁移过程中遇到问题,请在 Discord 上联系我们或查看 GitHub 仓库。
致敬, TinaCMS 团队 🦙