javascript - 使用 Babel 转换 JavaScript 文件以在 IE11 中使用
问题描述
我有一个mystuff.js
在 IE11 中引发错误的 JavaScript 文件(由于 for..of 循环等)。
所以我尝试用 Babel 转换它以在 IE11 中使用。但是 Babel 的输出似乎与 IE11 不兼容。(IE 抱怨“ SCRIPT5009: 'require' is undefined ”。)
看起来 Babel 的结果并不是 IE11 的真正 JavaScript ......
作为参考,我执行的步骤如下:
我安装
yarn add -D @babel/core @babel/cli @babel/preset-env yarn add @babel/polyfill
我创建了一个
babel.config.json
具有以下内容的:
{
"presets": [
[
"@babel/env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1",
"ie": "11"
},
"useBuiltIns": "usage",
"corejs": "3.6.4",
}
]
]
}
我有我的 JavaScript 文件,
src
所以我运行yarn babel src --out-dir lib
我从旧的 HTML 文件创建了一个新的 HTML 文件,以便它加载 JavaScript,
lib
而不是src
:<div id = "info">...</div> <script src="./lib/mystuff.js"></script>
我在 IE11 中提供并查看 HTML 文件,但在 IE 的控制台中出现上述错误。
解决方案
"require" 是 commonjs 模块导入功能,在浏览器 api(仅 nodejs)中不可用,您可以在脚本标签和 ES6 模块导入上使用属性 type='module' 但它仅适用于较新的浏览器。否则,如果您在源代码中使用导入并希望将代码发送到较旧的浏览器,您需要使用捆绑器,例如 webpack、rollup 或 parcel(比 webpack 更容易设置),Babel 仅填充 javascript 但不捆绑模块。
您还需要确保 babel 不会将 ES6 模块转换为 commonjs 模块(https://babeljs.io/docs/en/babel-preset-env#modules),因为正如我之前所说,浏览器不支持 commonjs
推荐阅读
- c - Is there a way to change an array size using malloc and free functions only?
- image-processing - Any recommended de-noise algorithm?
- android - What is the equivalent value for appbar_scrolling_view_behavior in the material library of androidx?
- python - 如何随机读取CSV两列数据?
- jira - JQL Query - Use a filter result in another JQL query
- php - 引导程序确认后未提交表单
- spring - 无法在反应测试中初始化“javax.el.ExpressionFactory”
- python - Is it possible to set other attributes in a @property setter in python
- keycloak - keycloak gatekeeper 404 after credentials
- firebase - Preventing developer access to Firebase Realtime Database