Parcel Note

Parcel Bundler 发布了这么久,终于有机会体验了一次。在一个新的基于 jQuery 的小项目中尝试了这个打包器。结合它的宣传点,整体来说最大的感受是:

  1. 确实比 Webpack 快很多
  2. 确实「基本上」不需要配置

虽然没有太多其它的亮点,但这不妨碍它用起来就是比 Webpack 「爽」。

关于「快」

就我的感受而言,Parcel 的快大多是要基于它的文件系统缓存的,这也是 Webpack 没有的东西(也许将来会有也说不定)。从体验上来说,应用启动以后「热重载」的速度基本上差不多,就算有差距也可以忽略不计,因为基本两者都是秒速。但是「重启」就不一样了。得益于它的文件系统缓存,Parcel 要比 Webpack 快两到三倍,甚至五倍十倍,我觉得一点都不夸张。这在日常开发中体现的优势还是相当明显的。

关于「零配置」

说零配置是有些夸张了,应该说 90% 的场景都不需要写配置。比如说 Webpack 必写的 babel-loader / css-loader 等东西,它都已经给内置了。开发者需要做的东西仅仅是把它安装下来而已。比如说:

  1. 我需要使用 Babel,则安装 @babel/core 就好了
  2. 我需要使用 Less 预编译 CSS,则安装 less 就好了
  3. 我需要使用 Pug 预编译 HTML,则安装 pug 就好了

事实上,你可能甚至不用做「安装」这一步。当它检测到你输入了某个类型的文件而需要安装某种依赖才能进行时,它会自动安装。

这种做法给人的感觉是,它并不是真正的零配置,而是所有的配置其实都已经写好了,内置了,然后它会检测你输入的文件类型,去匹配现有的规则,该干嘛干嘛。所以,这并不是什么黑科技,只是「约定大于配置」的一种体现。

吐槽点

在日常开发中,确实 90% 的场景下都不需要写配置,那么另外的那 10% 呢?

真正用下来会发现,Parcel 在带来方便的同时,也会带来一些问题:任何事物都是有两面性的。某些在 Webpack 下很稀松平常的任务,比如 js 代码混淆,加多一个 loader,配多一个规则就能解决的事情,在 Parcel 的世界里,对不起,做不到。你得自己想办法。

当然这也许是我对 Parcel 的了解还不够深入,不知道如何定制。但 Parcel 的文档里面确实没有提及任何相关的可定制化的东西。所以,真的要说到「可靠性」,「安全感」的话,可能我还是往 Webpack 这边站。但是,毋庸置疑的是 Parcel 确实为小项目提供了一个非常棒的选择。

另外再吐槽一点,Parcel 的文档强制给我跳转中文版,然而中文版文档更新滞后,缺斤少两,我选了英文以后,下次再打开还是中文,这一点太不友好了。