【问题标题】:Trouble Transpiling startsWith() Using Babel and Rollup使用 Babel 和 Rollup 转换startsWith() 的麻烦
【发布时间】:2018-03-03 20:26:17
【问题描述】:

我在使用 Rollup 和 Babel 编译 ES2015 的 startsWith 时遇到了意外问题。我正在使用babel-preset-env 并在我的.babelrc 中有以下内容:

{
   "presets": [
     ["env", {
       "targets": {
         "browsers": ["last 2 versions", "not ie >= 10"]
       }, 
       "debug": true
     }]
   ]
 }

我的rollup.config.js 设置为尊重我的.babelrc,我看到它在我的调试信息中正确输出它尊重我的浏览器目标。尽管如此,在我捆绑的 JS 中,我看到 startsWith 未动,在任何地方都看不到 polyfill。

我可能做错了什么?

【问题讨论】:

标签: javascript ecmascript-6 babeljs rollup


【解决方案1】:

Babel 只转换语法(如 let/const、箭头函数、类等),而不是 API 方法(如 .startsWith().includes())。

为此,您需要一个 polyfill,例如 babel-polyfill。但是,如果您只需要 .startsWith 函数,a simpler polyfill will suffice。那个,或者你可以简单地创建自己的 startsWith() 函数并使用它。

【讨论】:

  • 啊,没有意识到这些东西超出了 Babel 的范围。但是babel-env-preset 是否应该自动给我我需要的 polyfill,而不必包含babel-polyfill?无论如何,我以为我读过类似的东西。
  • 环境预设负责语法。它们将 polyfill 分离出来,因此您可以以最“舒适”的方式包含它,而不管您使用的是什么构建系统(例如,如果您想使用脚本标签、require()import '...' 等.)
  • 我认为它曾经在 babel 5 中那样工作,但 6 改变了这一点。您通常希望在加载您可能根本不需要的 polyfill 之前进行一些特征检测。
  • 太棒了——很高兴知道。只写了我自己的小 polyfill。谢谢! github.com/alexmacarthur/typeit/blob/master/src/startsWith.js
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多