带你认识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是近期最火的一款模块加载器 ...
随机推荐
- css按钮样式
style='height:22px;padding:1 17px;font-size: 8px;font-weight: 100;line-height: 25px;'http://www.boot ...
- 4. DHCP配置(Windows2012)
1.点击服务器管理器 2.选择添加角色和功能 3. 按照添加角色和功能向导来添加 保持默认,下一步 保持默认,下一步 保持默认,下一步 勾选DHCP服务器,在弹出的小窗点击添加功能. 保持默认,下一步 ...
- Flink-v1.12官方网站翻译-P025-Queryable State Beta
可查询的状态 注意:可查询状态的客户端API目前处于不断发展的状态,对所提供接口的稳定性不做保证.在即将到来的Flink版本中,客户端的API很可能会有突破性的变化. 简而言之,该功能将Flink的托 ...
- C++隐式推导-auto关键词
总述 C++中有一个关键字,它不进行显式声明,而进行隐式推导,auto可以在声明变量时根据变量初始值的类型自动为此变量选择匹配的类型.C++语言类似的关键字还有decltype. 如何评价 C++ 1 ...
- 新疆大学ACM新生赛(公开赛) E.异或 (思维,位运算)
题意:RT 题解: \(i\ mod \ k=0\),即所有事\(k\)的倍数的位置都要进行异或,根据异或的性质,我们知道如果相同的异或的数个数是偶数的话,得出的结果是\(0\),所以每次询问,我们判 ...
- 9.PowerShell DSC之Pull
前言 一般生产环境都使用Pull模式 配置Pull Server 配置Pull Server需要安装两个WindowsFeture:IIS.windows DSC,这两都可以通过UI界面化引导安装,也 ...
- CentOS7系统时间和硬件时间不同步问题
CentOS7系统中有两个时间:系统时间 和 硬件时间 我们常用命令 date 会输出系统时间,用 date 命令修改的也是系统时间 硬件时间是写入到 BIOS 中的时间,用 hwclock -r 命 ...
- kubernetes实战-交付dubbo服务到k8s集群(四)使用blue ocean流水线构建dubbo-demo-service
使用jenkins创建一个新的项目:dubbo-demo,选择流水线构建 勾选保存构建历史和指定项目为参数化构建项目: 添加构建参数:以下配置项,是王导根据多年生产经验总结出来的甩锅大法: 除了bas ...
- 编译安装MySQL 5.5.33
环境要求: 主机名 IP地址 需要软件及版本 系统版本 mysql.mfyxw.com 192.168.80.135 Mysql5.5.33 5.5.33 1.设定主机名 hostnamectl se ...
- Netty(五)Netty 高性能之道
4.背景介绍 4.1.1 Netty 惊人的性能数据 通过使用 Netty(NIO 框架)相比于传统基于 Java 序列化+BIO(同步阻塞 IO)的通信框架,性能提升了 8 倍多.事 实上,我对这个 ...