webpack简介
Webpack
是⼀个现代 JavaScript
应⽤程序的静态模块打包器(module bundler
),当 webpack
处理应⽤程序时,它会递归地构建⼀个依赖关系图(dependency graph
),其中包含应⽤程序需要的每个模块,然后将所有这些模块打包成⼀个或多个 bundle
。
Webpack
是⼀个打包模块化JavaScript
的⼯具,它会从⼊⼝模块出发,识别出源码中的模块化导⼊语句,递归地找出⼊⼝⽂件的所有依赖,将⼊⼝和其所有的依赖打包到⼀个单独的⽂件中是⼯程化、⾃动化思想在前端开发中的体现。
webpack安装
环境准备
nodejs::https://nodejs.org/en/
版本参考官⽹发布的最新版本,可以提升webpack的打包速度
安装⽅式
局部安装(推荐)
1 | npm init -y # 初始化npm配置⽂件 |
全局安装(不推荐)
1
2
3
4
5
6 安装webpack V4+版本时,需要额外安装webpack-cli
npm install webpack webpack-cli -g
检查版本
webpack -v
卸载
npm uninstall webpack webpack-cli -g
全局安装webpack,这会将你项⽬中的webpack锁定到指定版本,造成不同的项⽬中因为webpack依赖不同版本⽽导致冲突,构建失败
启动webpack
启动wekpack执行构建,默认
mode=production
(默认开启代码压缩)
webpack默认配置
- webpack默认⽀持JS模块和JSON模块
- ⽀持CommonJS Es moudule AMD等模块类型
- webpack4⽀持零配置使⽤,但是很弱,稍微复杂些的场景都需要额外扩展
准备执⾏构建
- 新建
src
⽂件夹 - 新建
src/index.js
、src/index.json
、src/other.js
- 新建
1 | // index.js |
- 执⾏构建
1 | npx⽅式 |
原理就是通过shell脚本在
node_modules/.bin
⽬录下创建⼀个软链接。
我们会发现⽬录下多出⼀个
dist
⽬录,⾥⾯有个main.js
,这个⽂件是⼀个可执⾏的JavaScript
⽂件,⾥⾯包含webpackBootstrap
启动函数。默认配置
1 | const path = require('path') |
webpack
配置名默认为webpack.config.js
,也可以用其他命名,其他命名需要修改package.json
“scripts”: {
“dev”: “webpack –config ./youFileName.js”
}
- 多入口对应多出口
1 | module.exports = { |
webpack配置核⼼概念
- chunk:指代码块,⼀个
chunk
可能由多个模块组合⽽成,也⽤于代码合并与分割。 - bundle:资源经过
Webpack
流程解析编译后最终结输出的成果⽂件。(输出到dist的文件) - entry:顾名思义,就是⼊⼝起点,⽤来告诉webpack⽤哪个⽂件作为构建依赖图的起点。
webpack
会根据entry
递归的去寻找依赖,每个依赖都将被它处理,最后输出到打包成果中。 - output:
output
配置描述了webpack
打包的输出配置,包含输出⽂件的命名、位置等信息。 - loader:默认情况下,
webpack
仅⽀持.js
.json
⽂件,通过loader
,可以让它解析其他类型的⽂件,充当翻译官的⻆⾊。理论上只要有相应的loader
,就可以处理任何类型的⽂件。 - plugin:
loader
主要的职责是让webpack
认识更多的⽂件类型,⽽plugin
的职责则是让其可以控制构建流程,从⽽执⾏⼀些特殊的任务。插件的功能⾮常强⼤,可以完成各种各样的任务。webpack
的功能补充
- mode:4.0开始,
webpack
⽀持零配置,旨在为开发⼈员减少上⼿难度,同时加⼊了mode
的概念,⽤于指定打包的⽬标环境,以便在打包的过程中启⽤webpack
针对不同的环境下内置的优化。
1 | const path = require("path"); |
webpack 默认只支持.js .json类型的模板。loader需要通过npm 进行安装
npm install style-loader -D
,npm install css-loader -D