Tobias Koppers 是一位自由软件开发者,家住德国纽伦堡。他因写出 Webpack 这个已有数百万开发者使用的开源软件而名噪一时。他目前专注于 JavaScript 和开源项目。以下是我对他个人的专访,希望对大家有所启发。
Gregor:你好,Tobias,JavaScript 社区都在谈论 Webpack,就连谷歌也已经把它集成到了自己的 Angular CLI 项目中了。很高兴 Webpack 诞生于纽伦堡,离我的老家英戈尔施塔特(德国)不远。跟我们分享一下,你当时怎么想起来写 Webpack 的,它怎么那么快就受到了大家欢迎的?
Tobias:你好,Gregor。实际上,谷歌也在参与 Webpack 的开发,只不过是间接参与。我在迷上 JavaScript 以前,也写过 Java 。谷歌曾经推出过一个工具,叫 GWT(Google Web Toolkit),让 Java 程序员能用 Java 编写客户端应用。GWT 其实是一个 Java 应用到 JavaScript SPA 的编译器,也使用了谷歌的一些应用。
GWT 有一个功能我研究了很长时间,就是代码拆分(code splitting)。这个功能可以延迟加载不常用的代码。对于要保持初始加载速度的大型应用,这个功能非常重要。但我没发现 JavaScript 的开源工具(2012年)中哪个具备这个功能,于是我就想写一个这样的工具,也就是 Webpack 。
换句话说,Webpack 诞生之初主要想解决代码拆分的问题。而在我看来,这也是 Webpack 今天这么受欢迎的原因所在。随着 Web 应用越写越大,而移动设备越来越普及(但上网环境相对不好),拆分代码的需求与日俱增。如果不拆分代码,就很难实现期望的性能。
Gregor:很多人拿 Webpack 跟 NPM 脚本、Grunt 和 Gulp 等进行比较。有人也确实通过 Webpack 实现那些工具的功能。我以后也会使用 NPM 脚本和 Webpack 。你对此怎么看,你除了 Webpack 之外,还会用其他任务工具吗?
Tobias: NPM 脚本对我而言足矣。实际上,说 Webpack 是 Grunt/Gulp 的替代器并不完全准确。Grunt 和 Gulp 以及 NPM 脚本都是任务执行程序。
Webpack 是模块打包程序。这两类程序的目标不一样。但 Webpack 简化了 必须“过度使用” Grunt 和 Gulp 和 NPM 脚本才能实现的 Web 开发任务也是事实。NPM 脚本才是 Grunt 和 Gulp 的替代品。
不过,除了纯粹的构建之外,任务运行程序也有存在的理由,比如部署、代码检查、版本管理,等等。
Gregor:在我的 JavaScript 培训课上,很多学员都说 Webpack 上手有多难多难。有没有也人跟说这么说过?如果有,你有没有想过怎么改进?
Tobias: 有,确实有这样的反馈。不过,也有不少用户在会用以后还这么说。而实际上 Webpack 使用起来很简单。只要会写网页,都会觉得它比之前的工具容易使用。
我认为这些反馈主要是因为 Webpack 的概念与其他工具的概念明显不一样,特别是在把 Grunt/Gulp 迁移到 Webpack 时。任务运行程序的配置是指令式的,描述的是每一步要执行什么任务。而 Webpack 的配置则是声明式的,就是说不会描述 Webpack 要执行的步骤,而只描述执行这些步骤的方式或执行后的结果是什么样的。
Gregor: 你的开发日程是怎么安排的?下一个 Webpack 的版本计划有什么功能?
Tobias: 现在还不太好说。很多事情都有可能,捡几个重要的说一下吧:
- 作用域提升:连接模块的小却强大的方式
- WebAssembly:支持 Web 应用中的二进制代码
- 持久缓存:更快的初段编译
- CSS(还有HTML)作为一类公民:对样式表(和HTML)的更多支持
- 其他
用户和赞助者决定实现这些功能的优先级。我建了一个投票页面,大家可以去投。所有人都可以表达自己的想法,但赞助者和志愿者的权重更大。因为他们需要一定的回报。用户当然希望多多益善。
Gregor:能否推荐几个 Webpack 最佳实践?
Tobias: 使用按需加载。非常简单,效果非常好。
Gregor:你个人有什么目标吗?我们会不会很快在媒体上看到,说你去谷歌去山景城了?
Tobias: 我不这样想。我很快会成为一个自由职业者。我会把更多的时间放到开源上来,通过捐助实现财务平衡。因为捐赠通常不够,我会接一些工作或咨询来弥补缺口。我很想知道这样行不行。也许有人会成为我的赞助商,提供额外几个星期的赞助(听见了吗,谷歌)。
维护一个开源项目需要付出的努力超出常人想象。现在,代码评审和解决 issuse 占了我80%时间。我既没足够的时间写代码,也没时间重构。甚至一些合并请求我都得拖上一段时间才能处理。我需要花时间仔细看一看。当然,志愿者并不想如此。我想这种情况会变的,只要我全职写 Webpack 就行了。但愿我能有更多时间写更多代码。
Gregor:非常感谢你接受采访!也感谢 Webpack,感谢它对 JavaScript 开发者的大力支持。非常喜欢你这个工具!
Tobias: 不客气。我要感谢社区。Webpack 并不是“我的”工具,它是500多位志愿者共同的成果。Webpack 的成功也是源于这个伟大的生态。
原文:www.cross-platform-blog.com
翻译:https://zcfy.cc/article/interview-with-webpack-founder-tobias-koppers