# Legacy 构建与兼容性指南(Vite / Webpack) 目的 - 本文档说明如何使用 legacy 构建以增强旧浏览器(例如较低版本 iOS / Safari)的兼容性,以及何时应该在源码层修复问题。 重要提醒 - 部分问题(尤其是正则引擎级语法,如 lookbehind `(?= 11'], additionalLegacyPolyfills: ['regenerator-runtime/runtime'], renderLegacyChunks: true, }) ] }) ``` 注意: - `targets` 决定哪些语法/Polyfill 需要应用。根据需要支持的最低版本设置。 - `additionalLegacyPolyfills` 可以把运行时库注入到 legacy bundle。 - `renderLegacyChunks` 生成按需加载的 legacy chunk,并配合 `type="module"` / `nomodule` 差异化加载。 - 但 plugin-legacy 无法改写正则 lookbehind 等引擎级语法;此类问题仍需在源码层处理。 Webpack 常见做法是用 Babel 做两套构建(modern + legacy),通过 `type="module"` / `nomodule` 差异化服务。示例依赖与 `babel.config.js` 请参考英文文档上半部分。 Polyfills - 使用 `core-js`(v3)和 Babel 的 `useBuiltIns: 'usage'`,并仅在 legacy 构建中注入需要的 polyfill。 正则语法特殊说明 - 引擎级正则语法必须在源码层处理:改写或运行时延迟构造并做 feature-detect。 测试与 CI - 在 CI 中运行 modern + legacy 构建,并在旧设备/模拟器上做 smoke tests。可加入静态检查阻止新提交引入高级正则写法。 快速检查(本地) ```bash pnpm dlx rg "\\(\\?