“ECMAScript 兼容旧浏览器”通常有两种理解:语法兼容(如 ES6+ 写法能在旧浏览器运行)和API 兼容(如 Promise、fetch 在旧浏览器中存在)。下面系统说明常见做法。
旧浏览器(如 IE11)不认识 let、const、箭头函数、class、模板字符串等语法,必须用工具转译。
npm install -D @babel/core @babel/preset-env
.babelrc / babel.config.js
{
"presets": [
["@babel/preset-env", {
"targets": {
"browsers": ["ie >= 11"]
}
}]
]
}
配合构建工具:
babel-loader@vitejs/plugin-legacy@rollup/plugin-babel语法转译后,API 仍可能不存在,需要 polyfill。
core-jsregenerator-runtime(async/await)whatwg-fetch(fetch)promise-polyfill示例(入口文件最前面):
import 'core-js/stable';
import 'regenerator-runtime/runtime';
Babel 自动按需引入(推荐):
{
"presets": [
["@babel/preset-env", {
"useBuiltIns": "usage",
"corejs": 3
}]
]
}
module.exports = {
entry: ['core-js', './src/index.js'],
output: { filename: 'bundle.js' }
};
import legacy from '@vitejs/plugin-legacy'
plugins: [
legacy({
targets: ['ie >= 11']
})
]
| 问题 | 解决方案 |
|---|---|
不支持 Promise |
core-js |
不支持 fetch |
whatwg-fetch |
不支持 Object.assign |
core-js |
| 不支持 ES Module | 打包为 IIFE / CommonJS |
如果只是少量脚本:
<script src="https://cdn.jsdelivr.net/npm/core-js-bundle/min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/regenerator-runtime/runtime.js"></script>
<script src="your-es5.js"></script>
✅ 新项目:Babel + core-js
✅ 现代浏览器为主:只转语法,不强制 polyfill
❌ 不建议继续深度兼容 IE(已淘汰)
如果你能说明:
我可以给你更具体的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。