Webpack早已成为前端开发者必备技能之一,本文从webpack的原理、打包流程以及webpack优化进行分析。webpack配置的文章在网上已经数不胜数了,本文就不做阐述啦。有问题的小伙伴欢迎留言指正~javascript
Webpack把一切都看成模块,当webpack处理应用程序时,根据给定的一个主文件,递归的构建一个关系依赖图。其中包含应用程序须要的每个模块,而后把这些模块打包成一个或多个包。css
Loader: Webpack把一切文件都视为模块,可是原生的js只能解析js文件,若是其它文件格式也想打包的话就须要用到loader。因此loader的做用是使webpack拥有了加载和解析非javascript的能力。它也能实现对不一样格式的文件处理,好比将scss转换成css、Typescript转换成js。转换这些文件,从而使其可以被添加到依赖图中。前端
Plugin : 用来扩展webpack的功能,让webpack拥有更多的灵活性。它并非直接操做单个文件,而是直接对整个构建过程起做用。在Webpack运行的生命周期中会广播出许多事件,Plugin 能够监听这些事件,使用自身丰富的Api控制 webpack 打包流程的每一个环节,实现对 webpack 的自定义功能扩展。java
区别总结 : loader实现对不一样格式文件的处理,转换这些文件,使其能够被添加到依赖图当中。plugin是用来扩展webpack的功能,不是直接操做文件。它由丰富的自定义api和生命周期事件,从而控制webpack打包流程的每一个环节。这是loader作不到的。 webpack
在以上过程当中,Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,而且插件能够调用 Webpack 提供的 API 改变 Webpack 的运行结果。 web
webpack
的uglifyjsplugin
来压缩JS文件, 利用cssnano(css-loader?minimize)
来压缩css。--optimize--minimize
来实现正确理解webpack背后的原理与基本知识,能够帮助咱们更好的使用webpack这一利器。但愿看了本文的盆友能够对webpack能够有个更深刻的认识,使用起来更加驾轻就熟。shell