没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。
最近工作中用到了nuxt,才发现,如果webpack学的6,nuxt基本不需要学习,没什么学习成本的,因此,这篇重新记录下webpack4的一些基础知识点,下一篇将会配置一个优化到极致的react脚手架,也希望大家能够持续关注,配置webpack就是优化优化再优化,哈哈~
酒壮怂人胆,我学这个的办法基本就分3步:
- 首先,将这些必要的配置,以及某些loader,某些插件,像语文课文一样默读,并背诵(这一步最重要)
- 动手去实践,去试错
- 理解其原理
好了,正式开始
前言
Webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。
WebPack和Grunt以及Gulp相比有什么特性
其实Webpack和另外两个并没有太多的可比性,Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack在很多场景下可以替代Gulp/Grunt类的工具。
- Entry:入口,Webpack 执行构建的第一步将从 Entry 开始,可抽象成输入。
- Module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。
- Chunk:代码块,一个 Chunk 由多个模块组合而成,用于代码合并与分割。
- Loader:模块转换器,用于把模块原内容按照需求转换成新内容。
- Plugin:扩展插件,在 Webpack 构建流程中的特定时机注入扩展逻辑来改变构建结果或做你想要的事情。
- Output:输出结果,在 Webpack 经过一系列处理并得出最终想要的代码后输出结果。
1. 从0开始配置结构
- 初始化项目结构
![29f8a7c9dd4198becbfb03ca2e4e7325.png](https://i-blog.csdnimg.cn/blog_migrate/7c97234343a1d4b97c43b0a9c527ae04.jpeg)
2. 配置webpack.config.js
- 在项目根目录新建webpack.config.js
![00b7e4cda92c6b9f9cd9f3ae30768caa.png](https://i-blog.csdnimg.cn/blog_migrate/1ad0aa8d654d5519f26092e72766249b.jpeg)
3. 配置开发服务器
![e3a7eb49664d47a1b6e9229f0da189fe.png](https://i-blog.csdnimg.cn/blog_migrate/e7cf41d86a88de86a5758ddf9d66e81e.jpeg)
4. 打包js
![45d3e0b08b604349e2377e27796ca142.png](https://i-blog.csdnimg.cn/blog_migrate/9558d338f308370b7ef834048131d426.jpeg)
5. 支持ES6,react,vue
![19a96e534371c5adccd12dd11eeea8ec.png](https://i-blog.csdnimg.cn/blog_migrate/1dac123d37859272e7bd19bcd525033e.jpeg)
6. 处理css,sass,以及css3属性前缀
处理css
![a5ece6f296e3d008d4023daa2d2709f8.png](https://i-blog.csdnimg.cn/blog_migrate/198f84c5ef41e02c5251ab73e041b0ab.jpeg)
动态卸载和加载CSS
style-loader为 css 对象提供了use()和unuse()两种方法可以用来加载和卸载css
比如实现一个点击切换颜色的需求,修改index.js
![3a670c345c0f7b72813320e217f8c4e2.png](https://i-blog.csdnimg.cn/blog_migrate/0b5fca909c377d2d133c14dd2df7cb4f.jpeg)
处理sass
![89c61b01417b836140aac0c353f783b9.png](https://i-blog.csdnimg.cn/blog_migrate/586090103ccd72d61c564aabd9a6b8bf.jpeg)
提取css文件为单独文件
![e18a4f1cabb9358dd595b53132360c3f.png](https://i-blog.csdnimg.cn/blog_migrate/eed8f3ce43764239f3a14959b0fcbc08.jpeg)
7.产出html
![d3135ad61d30bff8553643f1e7f7b6bc.png](https://i-blog.csdnimg.cn/blog_migrate/bc92c26f84809841455bfad59eb2f12a.jpeg)
8. 处理引用的第三方库,暴露全局变量
webpack.ProvidePlugin参数是键值对形式,键就是我们项目中使用的变量名,值就是键所指向的库
![9c765acb1efcc503841ec0e044751485.png](https://i-blog.csdnimg.cn/blog_migrate/89142d8d8a603e7310e4406c4b62f356.jpeg)
9. code splitting、懒加载(按需加载)
说白了就是在需要的时候在进行加载,比如一个场景,点击按钮才加载某个js.
![df57820cc15cf473b17a8b91c7243005.png](https://i-blog.csdnimg.cn/blog_migrate/71db7be095f2af99e7c9f3c99ba4b01f.jpeg)
10. JS Tree Shaking
![27f68e5da5b5affa6ccf847c548fe5c0.png](https://i-blog.csdnimg.cn/blog_migrate/478c1cc38bbf2bd68fd8dd29fbc372fb.jpeg)
11. 图片处理
![18f1664abf1ebdf06497064c823c31df.png](https://i-blog.csdnimg.cn/blog_migrate/c780ffe79f5e92a44078a2418768bf6d.jpeg)
12. Clean Plugin and Watch Mode
清空目录,文件有改动就重新打包
![015c2e472b2cd7e1ac61e66df2b99c37.png](https://i-blog.csdnimg.cn/blog_migrate/3f3896c54eee2aebcc034f8f06abc0f1.jpeg)
13. 区分环境变量
![866fdd25dfc6138d952f9ced43f19d56.png](https://i-blog.csdnimg.cn/blog_migrate/1b03b5be1773e2e7a43781da78cf19cf.jpeg)
14. 开发模式与webpack-dev-server,proxy
![5186997dc1df7f491f5bb1244ff24cf9.png](https://i-blog.csdnimg.cn/blog_migrate/8b4905541d49694638227ccec8387500.jpeg)
到这里基本就结束了,觉得有帮助,不妨点个赞,不足之处,还望斧正~
有喜欢的小伙伴们 可以动手关注下哦 我是搬运工 哪里需要搬哪里。
作者:张不怂
链接:https://juejin.im/post/5cea1e1ae51d4510664d1652
来源:掘金