【问题标题】:Babel preset env not targeting correct envBabel 预设环境未针对正确的环境
【发布时间】:2017-09-26 23:16:01
【问题描述】:

我可能对 babel-preset-env 的实际作用感到困惑。我的假设是它会为我的目标浏览器转换我的代码,包括任何必要的 polyfill。但在我的代码中似乎并非如此......

我的代码:

import "babel-polyfill"
...
var k = Object.values({ x: 's' });

我的 babel 设置:

    "presets": [
    [ "env", {
      "useBuiltIns": true,
      "targets": {
        "browsers": ["last 2 versions", "IE 10"]
      }
    }]
  ]

转译后的代码仍然包含Object.values,并且 IE 10 悄无声息地死掉(它确实转译了 - 我可以看到代码的其余部分发生了变化 - 似乎目标错误)。

Package.json(其中一些导入未使用):

"core-js": "^2.5.1",
"opentype.js": "^0.7.2",
"svg.draggable.js": "^2.2.1",
"svg.js": "^2.6.3",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.1",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-es2015-destructuring": "^6.23.0",
"babel-plugin-transform-object-rest-spread": "^6.23.0",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.6.0",
"babel-preset-latest": "^6.24.1",
"babel-register": "^6.24.1",
"clean-webpack-plugin": "^0.1.16",
"compression-webpack-plugin": "^1.0.0",
"copy-webpack-plugin": "^4.0.1",
"imports-loader": "^0.7.1",
"mocha": "^3.5.0",
"webpack": "^3.4.1",
"webpack-dev-server": "^2.8.2",
"webpack-merge": "^4.1.0"

【问题讨论】:

  • 鉴于您的更新,如果您查看 webpack 的输出包,您的 import "babel-polyfill"; 是否已扩展为 require 调用以加载内容?

标签: babeljs webpack-2


【解决方案1】:

babel-preset-env 在其默认状态下仅处理转换语法,而不是填充标准库功能。

听起来你会在你的配置中想要useBuiltins: true。您还需要按照那里的其他说明安装core-js 并为babel-polyfill 添加导入。

或者,您可以只加载 babel-polyfill 本身而不依赖 babel-preset-env

【讨论】:

  • 那么为什么在 babel 站点中是这样的:“babel-preset-env...根据您的目标浏览器或运行时环境自动确定您需要的 Babel 插件和 polyfill。”?
  • 因为它确实会做所有这些事情,但它不一定会自动完成所有这些事情。
  • 还是不行。用更多数据更新了我的问题。
  • 啊,搞定了。我脑子里放了个屁,正在寻找要转译的代码而不是 polyfill 的存在。我注意到useBuiltIns 的文档有“用法”选项 | “条目” |错误但不正确-尽管可行。不确定在这种情况下 true 等于什么。
  • master 分支上的文档适用于当前的测试版。如果您按照我的答案中的链接进行操作,则它专门针对 1.x 分支,该分支将其描述为仅具有布尔值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2018-01-21
  • 2014-11-18
  • 1970-01-01
相关资源
最近更新 更多