4

我正在使用 Gatsby ( doc )支持的 browserlist 来试验 Gatsby 和 polyfills 。

使用默认的浏览器列表配置,我得到了为 IE11 创建 polyfills 和工作警报的预期结果。请参阅我的github 存储库示例。该网站目前在 Netlify 上可用。

所以,我可以在生产代码中看到箭头函数和 array.prototype.find 函数是如何填充的。到目前为止没有什么奇怪的。

现在,如果我将浏览器列表更改为last 2 Chrome versions并构建生产,我希望数组 find() 方法的 polyfill 会消失,因为它受 chrome 支持。但是,我相信我仍然可以在以下位置找到相同的 polyfills(来自 core-js)app-2934fab61c547573181d.js

    dRSK: function(t, e, n) {
        "use strict";
        var r = n("XKFU")
          , o = n("CkkT")(5)
          , i = !0;
        "find"in [] && Array(1).find((function() {
            i = !1
        }
        )),
        r(r.P + r.F * i, "Array", {
            find: function(t) {
                return o(this, t, arguments.length > 1 ? arguments[1] : void 0)
            }
        }),
        n("nGyu")("find")
    },

所以我的问题是:为什么这些 polyfills 仍然可用,即使我使用显然不需要的浏览器列表查询?

4

1 回答 1

2

这可能听起来有点疯狂,但“它适用于我的机器”:)

npm run build在你的 repo 中运行,并且包中包含findpolyfill - 这是预期的,因为browserslistis [">0.25%", "not dead"]

更改browserslist["last 2 Chrome versions"]并没有改变构建中的任何内容 -find仍然存在。

经过一些实验后,我注意到任何browserslist更改都被忽略了。

所以我尝试了这个:

  1. 改变browserslistpackage.json
  2. npm run clean- 删除.cachepublic
  3. 跑了rm -rf node_modules
  4. 跑了npm install
  5. 跑了npm run buildfindpolyfill 不见了!

希望这对你有用!

我对此没有合乎逻辑的解释。

cleanPS:在编辑后他们推荐的文档中package.json- details。重新安装node_modules似乎有点极端,但似乎可以解决它。

于 2020-02-12T15:10:17.403 回答