​Webpack5 让我头疼!

2020-11-10 14:21:55 浏览数 (1)

Webpack 不再提供自动引用 polyfills。这是一个非常大的突破性变化,也引起了很多争议,下面就是一位 NPM 包维护者对 Webpack5 的吐槽。

npm 上的大多数软件包主要是使用 Node.js 开发的。但是,由于采用了自动引用 polyfills 功能,它们中的大多数在浏览器中也可以正常使用。问题是 Webpack 通过自动引用 polyfills 为开发者提供便利,现在又突然取消了。好像他们从来没有提供过这个功能,但是开发人员现在还是希望 npm 上的包在绑定后能在浏览器中使用。

虽然我意识到 WebpackJavaScript 社区中的一个重要工具,但我个人对它的感觉是复杂的,因为让作为一个包维护者的我感觉非常痛苦。用户会认为每个 Webpack 工具/配置问题都是某个特定包的问题,要求对该软件包(而非Webpack)提供支持。仅在过去的一年里,我就不得不处理数以百计的 Webpack 问题。

随着自动引用 polyfills 的取消,这只会变得更糟,因此我将在此明确列出我的立场:

  • 我的软件包主要是为 Node.js 开发的。它们中的许多都可以在浏览器中自动工作(这意味着它们不使用任何 Node.js API )。有些需要 Node.js API,而在 Webpack 5 则由开发者自己提供 polyfills
  • 我不打算在包中添加 polyfillsPolyfills 会让我的包变大并且带来 bug ,我不想让 Node.js 的用户因此而感到不方便。
  • 我不会做 Webpack 支持。过去我一直很宽容,回答了大多数 Webpack 支持问题,我本可以把这些时间花在更重要的事情上。

我喜欢 Node.js 的主要原因是,我不必处理JS前端工具的糟糕问题。

坦白地说, Webpack 不进行自动引用 polyfills 在理论上确实有意义。我只是认为他们做得太早了,并且对它对生态系统的影响考虑的很少。我想在几年中,当更多的 Node.js 软件包仅用于 ESModule 并且 Node.js 支持更多的浏览器 API 时,这种更改会容易得多。

糟透了!

大家一起去 Webpack Issues(https://github.com/webpack/webpack/issues) 投诉他们,是他们造成了这些影响!

如何手动添加 polyfills

这是 Webpack 博客文章所说的:

迁移:resolve.aliasProvidePlugin ,错误会给出提示。(有关v4中使用的 polyfills、mocks ,请参考 node-lib-browser)

我可以做些什么来长期改善这种情况?

你可以帮助 Node.js 和浏览器更加统一。例如,Node.js 具有 util.promisify ,这是比较常用的。我不明白为什么在浏览器中也没有这种重要的方法。反过来,浏览器具有 Node.js 应该具有的 API。例如,fetch 、Web StreamsWebsockets 等。

你觉的 Webpack 的这个改动对你影响大吗?欢迎留言讨论!

0 人点赞