我当初为什么写webpack_Tobias Koppers

时间: 2018-04-17阅读: 410标签: webpack
原文链接: www.cross-platform-blog.com
翻译链接:https://www.zcfy.cc/article/interview-with-webpack-founder-tobias-koppers

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多位志愿者共同的成果。Webpacks成功也是源于这个伟大的生态。


Vue中使用webpack别名的方法

Vue中使用webpack别名的方法,需要引入公共文件,但是公共文件的文件路径里当前文件很远,那么就会形成上面示例中的那种路径很长的情况。而因为文件目录是约定俗成的,不可轻易更改,无法修改相对路径。那么该怎么办呢?

webpack项目轻松混用css module

本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module。

Webpack 4.0.0不再支持 Node.js 4

Webpack 是一个现代 JavaScript 应用程序的模块打包器 (module bundler) 。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块

Webpack 4正式发布了!

新版 Webpack 中我们所做的每一个更新目的都在于此,为了当大家在使用 Webpack 的时候敏捷连续毫无顿挫感。 webpack 4 进行构建性能测试,得出的结果非常有趣。结果很惊人,构建时间降低了 60%-98%!

优化Webpack构建性能的几点建议

Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位。在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程都息息相关,如何改善 Webpack 构建打包的性能也关系到我们开发和发布部署的效率。

大多数项目中会用到的webpack小技巧

webpack技巧的总结:进度汇报、压缩、复数文件打包、分离app文件与第三方库文件、资源映射、输出css文件、开发模式、分析包的大小、更小的react项目、更小的Lodash、引入文件夹中所有文件、清除extract-text-webpack-plugin日志。

WebPack中Plugins的使用和整理,以及常用的Plugins插件

Plugins是webpack的基础,我们都知道webpage的plugin是基于事件机制工作的,这样最大的好处是易于扩展。讲解如果扩展内置插件和其他插件,以及我们常用的Plugins插件

关于Webpack中hash的用法

在webpack的配置项中,可能会见到hash这样的字符。这种带哈希值的文件名,可以帮助实现静态资源的长期缓存,在生产环境中非常有用。带hash的文件是现在web启用缓存来提升性能比较建议的形式。

如何写 Webpack 配置文件

本文从一个小Demo开始,通过不断增加功能来说明webpack的基本配置,只针对新手。webpack基本的配置就可以熟悉了,会引入loader,配置loader选项,会设置alias,会用plugins差不多。

一步一步webpack,webpack的学习入门

webpack是前端工程构建的一套工具,为什么一个程序称之为一套呢,是因为webpack其实是npm的一个模块,使用起来的话,这期间还需要很多其它模块来进行支持,所以我称之为一套工具。