webpack的基本使用
一、什么是webpack
概念: webpack是前端工程化的具体解决方案
主要工能: 它提供了友好的 前端模块化开发 支持,以及 **代码压缩混淆、处理浏览器端Javascript的兼容性、性能优化 ** 等强大的功能。
二、webpack的基本使用
- 在项目根目录中,创建名为
webpack.config.js
的webpack配置文件,并初始化如下的基本配置:
module.exports = {
//webpack的运行模式,可选择development和production
//development:开发阶段选择
//production:项目发布阶段使用
mode: 'development'
}
-
在
package.json
的scripts
节点下新增dev脚本"scripts": { "dev": "webpack" },
**script下的脚本可以通过
npm run
执行 如npm run dev
** -
在终端中运行
npm run dev
命令,启动webpack进行项目的打包构建
webpack.config.js文件的作用
-
webpack.config.js
是webpack
的配置文件。webpack在真正开始打包构建之前,会先读取这个配置文件,从而基于给定的配置,对项目进行打包。注意: 由于
webpack
是基于node.js
开发出来的打包工具,因此在它的配置文件中,支持使用node.js
相关的语法和模块进行webpack
的个性化配置。
webpack 中的默认约定
在webpack 4.x和5.x的版本中,有如下的默认约定:
- 默认的打包入口文件为src-> index.js
- 默认的输出文件路径为dist-> main.js
- **注意:**可以在
webpack.config.js
中修改打包的默认约定
自定义打包的入口与出口
在webpack.config.js
配置文件中,通过entry
节点指定打包的入口。通过output
节点指定打包的出口。
三、webpack中的插件
1. 插件的作用
通过安装和配置第三方的插件,可以拓展webpack的能力,从而让webpack用起来更方便。最常用的webpack插件有如下两个:
webpack-dev-server
- 类似于node.js阶段用到的nodelmon工具
- 每当修改了源代码,webpack会自动进行项目的打包和构建
html-webpack-plugin
- webpack中的HTML插件(类似于一个模板引擎插件)
- 可以通过此插件自定制index.html页面的内容
安装webpack-dev-server
npm i install webpack-dev-server@3.11.2 -D
- 配置
webpack-dev-server
修改package.json-> scripts
中的dev命令如下:
"scripts": {
"dev": "webpack serve"
},
再次运行npm run dev
命令,重新进行项目的打包
注意:webpack-dev-server会启动一个实时打包的http服务器
安装html-webpack-plugin
npm install html-webpack-plugin@5.3.2 -D
- 配置
html-webpack-plugin
- 解惑
html-webpack-plugin
- 通过HTML插件复制到项目根目录中的index.html页面,也被放到了内存中
- HTML插件在生成的index.html页面,自动注入了打包的bundle.js文件
devServer节点
在webpack.config.js配置文件中,可以通过devserver节点对webpack-dev-server插件进行更多的配置,
注意:凡是修改了webpack.config.js配置文件,或修改了package.json配置文件,必须重启实时打包的服务器,否则最新的配置文件无法生效!
四、webpack中的loader
在实际开发过程中,webpack默认只能打包处理以.jsl后缀名结尾的模块。其他非js后缀名结尾的模块,webpack默认处理不了,需要调用loader加载器才可以正常打包,否则会报错!、
loader加载器的作用:协助webpack打包处理特定的文件模块。比如:
- css-loader可以打包处理.css相关的文件
- less-loader可以打包处理.less相关的文件
- babel-loader可以打包处理webpack无法处理的高级J5语法
打包处理css文件
- 运行
npm i style-loader@3.0.0 css-loader@5.2.6-D
命令,安装处理css文件的loader - 在
webpack.config.js的module-> rules
数组中,添加loader规则如下:
其中,test表示匹配的文件类型,use表示对应要调用的loader
注意:
- use数组中指定的loader顺序是固定的
- 多个loader的调用顺序是:从后往前调用
- webpack默认只能打包处理.js结尾的文件,处理不了其它后缀的文件
- 由于代码中包含了index.css这个文件,因此webpack默认处理不了
- 当webpack发现某个文件处理不了的时候,会查找webpack.config.js这个配置文件.看module.rules数组中,是否配置了对应的loader加载器.
- webpack把index.css这个文件,先转交给最后一个loader进行处理(先转交给css-loader)
- 当ess-loader处理完毕之后,会把处理的结果,转交给下一个loader(转交给style-loader)
- 当style-loader处理完毕之后,发现没有下一个loader7,于是就把处理的结果,转交给了webpack
- webpack把style-loader处理的结果,合并到/dist/bundle.js中,最终生成打包好的文件.
打包处理less文件
-
运行
npm i less-loader@10.0.1 less@4.1.1-D
命令 -
在
webpack.config.js的module-> rules
数组中,添加loader规则如下:
打包处理样式表中与url路径相关的文件
运行npm i url-loader@4.1.1 file-loader@6.2.0 -D
命令
在webpack.config.js的module-> rules
数组中,添加loader规则如下:
其中?之后的是loader的参数项:
- limit用来指定图片的大小,单位是字节(byte)
- 只有小于等于limit大小的图片,才会被转为base64格式的图片
打包处理js文件中的高级语法
webpack只能打包处理一部分JavaScript语法,对于那些无法处理的高级的js语法,需要借助于 babel-loader
进行打包处理。
运行npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D
- 配置babel-loader
- 在项目根目录下,创建名为babel.config.js的配置文件,定义Babel的配置
打包发布
配置package.json文件scripts节点下,新增
清除文件夹
运行npm i --save-dev clean-webpack-plugin
命令
-
配置文件
-
在webpack.config.js中