Webpack到底是做什么用的,什么时候应该使用它呢?

我在企业项目中是多页面系统,前端的HTML CSS js 我们都没有用打包工具还是可以正常工作,我想请问大家webpack到底有什么好处,什么时候应该…
关注者
30
被浏览
63,892

4 个回答

Webpack 是一个前端构建工具,可以将所有资源(包括Javascript,图像,字体和CSS等)打包后置于依赖关系中,使你可以按照需求引用依赖来使用资源。

那么什么时候使用呢? 如果你正在用许多非代码的静态资源(比如CSS,图像,字体等)构建一个复杂的前端应用程序,那么Webpack会给你带来很大的好处。如果你的应用程序非常小,并且你没有什么的静态资源,并且你只需要一个JS文件就足够客户端需求,那么Webpack就没有必要使用。

webpack的好处:

  • 清晰简明的模块。一个稍微有点规模的应用往往有着一个复杂的资源关系网,在需要做优化的时候就会使一件非常的头疼的事情。webpack可以代替你做这个麻烦事,将复杂的多个文件打包成你希望的代码模块,引入会非常清晰,想对引入文件做点什么操作也会更容易。
  • 代码拆分来做资源异步加载。webpack打包成一个模块之后也带来一个问题,如果加载模块过于庞大,加载的速度就没法保证,所以webpack也提供了拆分代码后异步加载的方式,即先加载某个主要模块,当用到某个需要资源异步加载的模块时在对其发送请求加载,这样做在大型项目中很常见。
  • 消除对未引用资源的依赖。在复杂应用又多静态资源的情况下会减少很多无效的浪费,这会对应用的有很大提升。
  • 可以控制资源的处理方式。通过loader或者插件,我们可以对不同类型的文件引入做我们希望的操作。比如对代码压缩,uglify,图片压缩,文件处理,css预处理等等。
  • 稳定的生产部署。开发环境到生产环境的自定义配置到打包方式,通过同一套流程稳定的导出,这些都会给项目带来很大的效率提升,这对于一个大型项目来说,是至关重要的。
  • 一系列开发辅助工具。Dev-Server,HMR,这些都不用再一点点去配置,即开即用,大大提升了开发效率。

总的来说,一个成熟的前端应用都会需要一套构建打包工具,随着前端的进步发展推陈出新,现在公认较为优秀的就是webpack了。

我们以使用了 webpack npm script 作为项目构建工具的项目,和以下几种项目作对比

和只使用了Gulp / Grunt之类的流程自动化工具的项目作对比

其实Webpack和 glup/grunt 并没有太多的可比性。

Gulp/Grunt是一种能够优化前端的开发流程的工具,而 webpack 是一种模块化的解决方案之一,不过Webpack的优点(拥有强大的插件生态)使得Webpack可以替代Gulp/Grunt类的工具。gulp 也可以把 webpack 作为某个 task 的插件来调用,引入 gulp-webpack 即可。

Grunt和Gulp的工作方式:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,这个工具之后可以自动替你完成这些任务。

Webpack的工作方式:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。

在webpack看来一切都是模块! 这就是它不可不说的优点,包括你的JavaScript代码,也包括CSS 和 fonts 以及 image 等等等,只要通过合适的loaders,它们都可以被当做模块被处理。其实webpack的官网图片清晰明了说明webpack是个什么鬼了。

和没有使用任何自动化工具,只有纯原生的html/css/js的项目对比

有了webpack就可以实现 组件化 了:

一个组件,多处调用,方便我们维护代码,想一想要是没有组件可以调用,同一段组件的代码复制粘贴得到处都是,以后要修改这个组件的时候多惨。有组件可以调用,不用复制粘贴一大段,又偷懒省了0.5s ,耶,好爽。vue的组件化就是基于webpack的配置实现的。

有了webpack就可以实现 源代码的代码拆分 了:

有职业道德的程序员都知道,一条函数尽量不要超过50行代码(准确来说是不要超过一个屏幕的高度),单个文件不超过200行,否则会大大增大维护难度。想一想你为了找到某条function的定义,鼠标滚轮都滚烂了,滚了好几屏显示屏,结果还是没找到,不会想一拖hai扔过去吗???作为一个维护过外包写的一个文件5000行代码的女人,说多都是泪,深刻体会到了代码规范的重要性。

有了 webpack 就能够在 dev 的时候,将源代码的每一个代码量巨大的大文件,尽量拆分成精悍的小文件,然后各个文件以 import ... from ... 或者 require( ' ' ) 之类的方式互相引入,在上线前再用 webpack 打包成一个大文件,(因为 http 请求是很珍贵的,成本高昂,如果直接以多个小文件互相依赖的方式放到线上,会增加线上代码的请求个数,同时各个依赖之间的加载顺序一旦发生错乱,js的执行则会报错。为了减少请求个数,同时不让js的加载阻塞页面渲染,上线前用 webpack 打包、压缩,是十分有必要的)

有了 webpack 就可以........ // 欢迎补充 O(∩_∩)O~~

为什么?