带你认识webpack
一、webpack是什么
webpack是一种前端资源构建工具,一个静态模块打包器(module bundler)。在webpack看来,前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)

1、首先解释下什么是构建工具
比如我们新建个文件引入less外部文件,样式并不会生效,是因为less对于浏览器来讲并不能识别,我们需要借助工具,将less编译为css代码才能被浏览器识别,所以当我们使用这种css预处理器技术去开发样式时,我们就需要工具将less编译成css。
在使用js开发一些业务的时候需要用到一些ES6语法或ES7一些更高的语法,比如ES6的module这些语法很可能浏览器不认识,其实一些最新的浏览器对于一些高级语法也不认识,更何况IE8或者更低版本的浏览器就更不认识了,所以这时候我们也需要用工具能够帮我们把浏览器不能识别的语法编译成浏览器能够识别的语法。
可能将来还写一些其他东西,这些东西也需要使用另外一个工具继续进行编译处理,那么这一个个小工具在过去需要分别维护就很麻烦,所以前端提出了一个概念叫构建工具
构建工具就是找一个大的工具,将这些小工具的功能都包含进来,那么此时我们只需要关心这个大工具如何使用就可以了,这个大工具就能把这一系列小事情全都干好。那么这个大工具就叫构建工具。webpack是构建工具的一种。
2、接下来解释下什么是静态模块打包器
像Vue这些模块化开发,我们在写代码的时候,通常会在一个页面中引入我们整个文件所需要的所有资源如下图:看下index.js,比如我们引入js资源import $ from jquery,将来写样式需要引用样式资源 import './introduce.less',还要引入其他资源比如图片、字体等,这些资源都要交给构建工具去处理,那构建工具webpack怎么处理呢,首先我们需要告诉webpack打包的一个起点(就是所谓的入口文件),webpack就会以这个入口文件作为起点开始打包,它会将每个依赖都记录好形成一个依赖关系树状图,比如index.js是最外面的结构,下面有两个jq和less依赖,形成这样的关系依赖图,形成好之后它就会分别通过这个依赖图先后顺序依次把这些资源引入进来,引进来形成一个东西我们叫chunk(代码块),将这些代码全部引入进来形成一个代码块,然后对这个代码块进行各项处理(比如说将less编译成css、由js资源编译成浏览器能够识别的js语法等等操作),这些操作我们统一称为打包,打包后将这些处理好的资源输出出去,输出的东西我们叫bundle

总结下大概过程:根据入口文件index.js的依赖关系,将这些资源全部引入进来形成chunk,再根据chunk按不同的资源进行不同的处理,这个处理过程我们叫打包,打包之后输出出去,输出的文件我们叫bundle,其中index.js和jq以及less我们称为模块。
二、webpack可以做的事情
1、可以实现代码转换:比如说将ES6转换为ES5,把less、sass转换为css
2、文件优化:在我们打包过程中压缩代码体积、合并文件等这些都是webpack优化的点
3、代码分割:在开发多页面应用时可能会涉及到公共模块的抽离,可能包括路由的懒加载
4、模块合并:希望把多个模块合并成一个模块,按照功能分类
5、自动刷新:在webpack开发中它会自己帮我们启动一个本地服务来实现代码变更后可以更新我们的页面包括热更新等
6、代码校验:比如校验我们代码是否符合规范
7、自动发布:最后打包完成之后还能实现自动发布的功能
三、需要提前掌握的内容
1、需要准备的环境
Node.js 10版本以上
webpack 4.26版本以上
2、预备技能
基于Node.js知识和npm指令
熟悉ES6语法
更多知识可关注微信公众号:web前端自学平台
带你认识webpack的更多相关文章
- 带你走进webpack世界,成为webpack头号玩家。
最近朋友圈被<头号玩家>刷爆了,斯皮尔伯格一个资深电影导演,把对过去经典的致敬,对未来的憧憬浓缩在这一部电影中,可以说让观众燃了起来. 观望整个前端开发,不断的演化,发展迅速.前端开发从最 ...
- 细说 webpack 之流程篇
摘自: http://taobaofed.org/blog/2016/09/09/webpack-flow/ 引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器 ...
- 细说webpack之流程篇
引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器,只需配置几个文件,加载各种 loader 就可以享受无痛流程化开发.但对于 webpack 这样一个复杂度较 ...
- 走近webpack(0)--正文之前的故事
在前端工作的过程中,只要你接触过vue,angular,react,gulp就一定知道webpack或者听说过或者使用过webpack,但是或许你对webpack的使用方法并不是十分了解,只是会用写好 ...
- webpack基本配置
module: { rules: [ { test: /\.css$/, use: ['style-loader','css-loader?minimize'] } ] } 一.入门 loader可以 ...
- webpack 优化
1 优化loader配置 1.1 缩小文件匹配范围(include/exclude) 通过排除node_modules下的文件 从而缩小了loader加载搜索范围 高概率命中文件 module: ...
- webpack学习笔记--配置entry
Entry entry 是配置模块的入口,可抽象成输入,Webpack 执行构建的第一步将从入口开始搜寻及递归解析出所有入口依赖的模块. entry 配置是必填的,若不填则将导致 Webpack ...
- 26.webpack 入门
webpack 官方: https://webpack.js.org/ http://webpack.github.io/ 中文: https://www.webpackjs.com/ 资料: htt ...
- webpack构建工具快速上手指南
最近在研究react项目,接触到webpack打包工具.刚接触的时候一脸茫然,经过最近的学习,下面我来带大家开启webpack入门之旅. webpack是什么 webpack是近期最火的一款模块加载器 ...
随机推荐
- hbase远程api调用, 远程连接开发,环境构建相关问题总结
平时在开发的过程中,都是将hbase的环境装在虚拟机或者双系统上的,开发是直接在unix或者linux上进行的,这样对于使用上,有些繁琐. 下面我将介绍我在使用windows远程开发过程中的一些总结: ...
- samba 随笔
SElinux以及防火墙的关闭 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启. 如果不想重启 ...
- OpenStack (haproxy)
openstack部署脚本 链接:<https://pan.baidu.com/s/1BTp_tGNC6ZWwVmKkhwivgw > 提取码:jxuz haproxy 官网:< h ...
- Angular写一个Form组件-TagInput
前端开发少不了和表单打交道; Angular中, 提供了强大的表单的支持, 响应式表单(Reactive Form) 和 模板驱动的表单(Template-driven Form) 的双向数据流给我们 ...
- 2019牛客暑期多校训练营(第三场)A.Graph Games (分块)
题意:给你n个点 m条边的一张图 现在有q次操作 每次操作可以选择反转l~r的边号 也可以询问S(l)和S(r) 连接成的点集是否相同 思路:我们把m条边分块 用一个S数组维护每块对一个点的贡献 然后 ...
- 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program(DFS计算图中所有环的长度)
题目链接:https://codeforces.com/gym/102361/problem/F 题意 有 \(n\) 个点和 \(m\) 条边,每条边属于 \(0\) 或 \(1\) 个环,问去掉一 ...
- Codeforces301D. Yaroslav and Divisors
题意:2e5的全排列 每次询问一个区间有多少对数 满足一个数是另一个数的倍数 题解:考虑离线来做 看到有个说法说 在处理有两种约束的问题时 一般用数据结构边插入边询问的方式 这个题正是如此 我们用su ...
- 【洛谷 p3390】模板-矩阵快速幂(数论)
题目:给定n*n的矩阵A,求A^k. 解法:利用矩阵乘法的定义和快速幂解答.注意用负数,但是数据太弱没有卡到我......(P.S.不要在 typedef long long LL; 前使用 LL. ...
- 哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛) C.Coronavirus (BFS)
题意:有一个图,要求从\(S\)走到\(E\),\(.\)表示可以走的路径,\(*\)周围的八个方向均不能走,要求判断是否能走到\(E\),若能,输出最小路径长度,否则输出\(Impossible\) ...
- Jmeter入门使用
1. 什么是Jmeter 转自:https://www.cnblogs.com/lijuanhu321/p/9537185.html#testComponent https://www.cnblogs ...