花了一两天回顾了下 webpack 各个配置的作用,简单记录下。
主要阅读列表:
http://webpack.wuhaolin.cn/(有强制广告,用charles代理可以去掉,但还是建议买书支持)
http://imweb.io/topic/5a4451c3a192c3b460fce366
http://taobaofed.org/blog/2016/09/09/webpack-flow/ https://lihuanghe.github.io/2016/05/30/webpack-event.html

一、webpack 背景

1、面临的问题

前端模块思想的普及,vue、less 等各种框架工具的出现,让前端开发效率更高,但是这些框架和工具的源码都不能直接跑在浏览器或者服务端,需要转化构建。

2、解决的手段
构建需要把源代码转化成可直接在终端上运行的 html、css、js, 具体需要实现的功能如下:

  • 代码转换:ts 转换成 js,less 转换成 css
  • 文件优化:压缩js、css、html,合并图片
  • 代码分割:提取多个页面的公共代码,提取首屏不需要的部分让其异步加载(不熟悉这个功能)
  • 模块合并:把模块分类,合并成一个文件
  • 自动刷新:监听本地源代码的变化,可以做到热替换模块
  • 代码校验:在提交代码到远程仓库之前用 eslint 检验代码是否符合规范、是否通过单元测试
  • 自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统

二、webpack的构建流程

1、概念

在 webpack眼里,一切皆模块,一般一个模块就是指一个文件, 所有模块(文件)构建后都会打包为最终的 js,html,css,image,如下图所示:

2、有哪些配置项

webpack 的配置项一般放在 项目下的 webpack.config.js 里,用一个 object对象 来描述所有配置信息,如下:

  • Entry:配置打包文件入口,可以是一个或者多个文件
  • Output:配置输出文件名、文件路径
  • Module:用来配置模块的读取和解析规则,即打包过程中规定什么类型、什么路径的的模块用哪个 loader 来解析,常用 loader 有babel-loader(把 es6代码转换成 es5)
  • Resolve:配置如何寻找模块对应的文件,可以规定寻找文件时补全后缀的规则,规定寻找文件的默认路径别名等等
  • Plugin:扩招 webpack 构建中各个阶段的功能,比如webpack-parallel-uglify-plugin(压缩代码)、extract-text-webpack-plugin(提取 js 中的 css 到单独的 css 文件中)

3、构建流程

1)粗略构建流程如下:
A.Webpack 启动后会从Entry里配置的Module开始递归解析 Entry 依赖的所有 Module。
B.每找到一个 Module, 就会根据配置的Loader去找出对应的转换规则,对 Module 进行转换后,再解析出当前 Module 依赖的 Module。
C.这些模块会以 Entry 为单位进行分组,一个 Entry 和其所有依赖的 Module 被分到一个组也就是一个 Chunk。
D.最后 Webpack 会把所有 Chunk 转换成文件输出。 在整个流程中 Webpack 会在恰当的时机执行 Plugin 里定义的逻辑。
2) 详细构建流程如下:

三、具体怎么配置:webpack4

有了 parcel 的竞争,webpack 推出了配置量极小的 webpack4,配置方法可以参考:
1、webpack的简单配置

2、webpack 官方 API

转载于:https://juejin.im/post/5ad9a8496fb9a07abb2327eb

webpack 阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. webpack 实践笔记(一)--- 入门

    webpack 实践笔记入门(一) [webpack官网文档地址]:(http://webpack.github.io/docs...) [实践工程地址]: (https://github.com/s ...

  7. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  8. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  9. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

最新文章

  1. 使用 Contour 接管 Kubernetes 的南北流量
  2. 第一行代码学习笔记第五章——详解广播机制
  3. linux windows主题下载官网,Linux Deepin 15.10.2 桌面kwin主题App美化
  4. inputn函数与input函数的区别
  5. 2018年Java展望
  6. DevOps 火爆,要学这么多技术!
  7. 基于VUE+TS中引用ECharts的中国地图和世界地图密度表
  8. 产品设计的基本原则是什么
  9. php在html中if,html里的if注释怎么使用
  10. ThinkPHP5 php-jwt
  11. c#如何实现叫号操作_C#开发银行叫号系统方案
  12. CREO:CREO软件之工程图【注释】之尺寸、注解、表面粗糙度、符号、几何公差的简介及其使用方法(图文教程)之详细攻略
  13. Android学习路线指南-------任玉刚
  14. Prewitt和Sobel算子
  15. 【Python】打印200以内所有素数
  16. Ken Thompson 在餐巾纸上设计的 UTF-8
  17. 图文讲解uni-app支持PC宽屏
  18. 微信群控系统制作系列一——java模拟登录网页版微信
  19. MySQL之mysqlcheck、check、optimize和analyze
  20. Vi编辑器的常用命令1(文件内操作)

热门文章

  1. 超好用!5款开源的移动自动化测试工具
  2. Android Studio Gradle 问题 解决方案
  3. UITableView加载几种不同的cell
  4. Android开发小知识点(二)
  5. CentOS防火墙操作实例(启动、停止、开、闭端口)
  6. 【转载】ARX给CAD发送命令的几种方法
  7. centos 下的 PHP 的编译过程
  8. windows2003+iis6.0+php(fastcgi)5.3+wincache+memcached
  9. 用GCD来处理大量for loop任务
  10. wxPython布局管理