带你认识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是近期最火的一款模块加载器 ...
随机推荐
- Java基本类型的内存分配在栈还是堆
我们都知道在Java里面new出来的对象都是在堆上分配空间存储的,但是针对基本类型却有所区别,基本类型可以分配在栈上,也可以分配在堆上,这是为什么? 在这之前,我们先看下Java的基本类型8种分别是: ...
- Java并发包源码学习系列:阻塞队列实现之LinkedBlockingDeque源码解析
目录 LinkedBlockingDeque概述 类图结构及重要字段 linkFirst linkLast unlinkFirst unlinkLast unlink 总结 参考阅读 系列传送门: J ...
- Inceptor [Code: 40000, SQL State: 42000] COMPILE FAILED: Internal error NullPointerException: [Error 40000] java.lang.NullPointerException
下面代码报空指针 with `__all_dim__` as ( select * from ( select from_unixtime(unix_timestamp(`__bts__`) -1,' ...
- AtCoder Beginner Contest 188 D - Snuke Prime (思维,差分)
题意:你需要订阅一些服务,每个服务每天需要花费\(c_i\),要从第\(a_i\)用到第\(b_i\)天,你可以购买会员,会员每天需要花费\(C\),但是这天的服务不用再另花钱了,问你订阅这些服务的最 ...
- CF1462-F. The Treasure of The Segments
题意: 给出n个线段组成的集合,第i个线段用 \(\{l_i, r_i\}\) 表示线段从坐标轴的点\(l_i\)横跨到点\(r_i\).现在你可以删除其中的一些线段,使得剩下的线段组成的集合中至少存 ...
- VS2010的单元测试(一)
在VS2010中,单元测试的功能很强大,使得建立单元测试和编写单元测试代码,以及管理和运行单元测试都变得简单起来,通过私有访问器可以对私有方法也能进行单元测试,并且支持数据驱动的单元测试. 一.创建单 ...
- 关于虚继承的sizeof问题
首先关于虚继承和普通继承的知识,我总结一下: 1.普通继承时,无论派生类是否定义新的虚函数,基类和派生类总是共享一个虚函数表,不需要另加指向虚函数的指针,派生类只是将虚函数表中的元素改成了派生类的地址 ...
- 脚本化CSS(通过JS来间接操作CSS)
(一)通过.style.形式,获取的是行间样式,可读可写 1.行间样式语法 1 <div style="width:100px;border:5px solid red;height: ...
- Bootstrap导航组件
Bootstrap 中的导航组件都依赖同一个 .nav 类,状态类也是共用的.改变修饰类可以改变样式. 标签页 注意 .nav-tabs 类依赖 .nav 基类 <ul class=" ...
- 如何快速定位 Redis 热 key?
背景 在 Redis 中,热 key 指的是那些在一段时间内访问频次比较高的键值,具体到业务上,商品的限时抢购.瞬时的新闻热点或某个全局性的资源,都极有可能产生热点 key. 热点 key 的出现可能 ...