Webpack 不再提供自动引用
polyfills
。这是一个非常大的突破性变化,也引起了很多争议,下面就是一位 NPM 包维护者对 Webpack5 的吐槽。
npm
上的大多数软件包主要是使用 Node.js
开发的。但是,由于采用了自动引用 polyfills
功能,它们中的大多数在浏览器中也可以正常使用。问题是 Webpack
通过自动引用 polyfills
为开发者提供便利,现在又突然取消了。好像他们从来没有提供过这个功能,但是开发人员现在还是希望 npm
上的包在绑定后能在浏览器中使用。
虽然我意识到 Webpack
是 JavaScript
社区中的一个重要工具,但我个人对它的感觉是复杂的,因为让作为一个包维护者的我感觉非常痛苦。用户会认为每个 Webpack
工具/配置问题都是某个特定包的问题,要求对该软件包(而非Webpack
)提供支持。仅在过去的一年里,我就不得不处理数以百计的 Webpack
问题。
随着自动引用 polyfills
的取消,这只会变得更糟,因此我将在此明确列出我的立场:
- 我的软件包主要是为
Node.js
开发的。它们中的许多都可以在浏览器中自动工作(这意味着它们不使用任何Node.js API
)。有些需要Node.js API
,而在Webpack 5
则由开发者自己提供polyfills
。 - 我不打算在包中添加
polyfills
。Polyfills
会让我的包变大并且带来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.alias
和ProvidePlugin
,错误会给出提示。(有关v4中使用的polyfills、mocks
,请参考node-lib-browser
)
我可以做些什么来长期改善这种情况?
你可以帮助 Node.js
和浏览器更加统一。例如,Node.js
具有 util.promisify
,这是比较常用的。我不明白为什么在浏览器中也没有这种重要的方法。反过来,浏览器具有 Node.js
应该具有的 API
。例如,fetch 、Web Streams
,Websockets
等。
你觉的 Webpack
的这个改动对你影响大吗?欢迎留言讨论!