webpack
概念
主要功能:
好处:
- 程序员能把工作重心放到具体的功能实现上
目前Vue
,React
等前端项目,基本上都是基于webpack
进行工程化开发的。
基本使用
隔行初始化变色的案例
npm install jquery -S or npm i jquery -S
npm install jquery --save # 与上面语义一致
- 使用
-S
会将包(此处为jquery)的相关信息写入package.json
中的dependencies
在项目中安装 webpack
npm i webpack@5.42.1 webpack-cli@4.9.0 -D
npm i webpack@5.42.1 webpack-cli@4.9.0 --save-dev # 与上面语义一致
-
使用
-D
会将包(此处为webpack、webpack-cli)的相关信息写入package.json
中的devDependencies -
devDependencies 里面的插件只用于开发环境,不用于生产环境;dependencies 是需要发布到生产环境的。
-
比如我们写一个项目要依赖于 jQuery,没有这个包的依赖运行就会报错,这时候就把这个依赖写入dependencies ;而我们使用的一些构建工具比如 webpack 这些只是在开发中使用的包,上线以后就和他们没关系了,所以将它写入devDependencies。
在项目中配置 webpack
script 节点下的脚本是可以运行的。
"dev"是脚本的名字,可以自定义,"webpack"是固定写法。
webpack.config.js 中mode的作用
webpack.config.js 的作用
webpack.config.js
会在运行 npm run dev 命令时被读取,webpack根据其中给定的配置,对项目进行打包。
webpack 中的默认约定
在 webpack 4.x 和 5.x 的版本中,有如下的默认约定:
可以在webpack.config.js
中修改这一默认约定。
自定义打包入口与输出路径
在webpack.config.js
中,通过entry节点指定打包的入口,通过output节点指定打包的出口。
webpack 中的插件
插件的作用
安装插件可以扩展 webpack 的能力,让它用起来更方便。常用的插件有:
- webpack-dev-server
- html-webpack-plugin
webpack-dev-server
安装
在项目路径下运行如下命令:
npm install webpack-dev-server@3.11.2 -D
配置
-
注意:webpack-dev-server 会启动一个实时打包的 http 服务器
-
引用js文件时需要注意:如果使用 webpack-dev-server 插件来自动打包,生成的js文件会放在内存中,
路径为项目根目录(路径可能为output.filename)。(物理磁盘中无法看到)
html-webpack-plugin
安装
在项目路径下运行如下命令:
npm install html-webpack-plugin@5.3.2 -D
配置
- 这样配置完后,直接打开 http://localhost:8080/ 就可以看到 index.html 的内容了
- 复制出来的 index.html 会存储在内存中,磁盘里看不见。
一些疑惑
- 通过 html-webpack-plugin 插件复制到项目根目录中的 index.html 页面,也被放到了内存中
- html-webpack-plugin 插件在生成的html文件中,自动注入了一个script标签,该标签的src属性为output.filename
webpack.config.js 中的一些属性
devServer
通过devServer
属性,可以对webpack-dev-server
插件进行更多配置。
webpack 中的 loader
在实际开发过程中,webpack默认只能打包处理以.js
结尾的文件,其他非.js
结尾的文件需要调用loader
才可以正常打包,否则会报错。
loader
的作用:协助webpack打包处理特定的文件模块。比如:
loader 的调用过程
处理css文件
-
安装和配置 css-loader
-
当 webpack 发现某个文件处理不了的时候,会查找配置文件
webpack.config.js
,看module.rules
数组中是否配置了相应的 loader。如果有,webpack 把这个文件转交给module.rules
中的最后一个 loader处理。
处理less文件
-
运行如下命令,安装 less-loader
npm i less-loader@10.0.1 less@4.1.1 -D
处理url路径相关的文件
-
安装和配置 url-loader
-
url-loader 的 limit 选项
limit
用来控制是否对图片进行base64编码,以减少http请求。低于limit大小的图片将会进行base64编码。
单位是字节(Byte)
打包处理js文件中的高级语法
-
webpack 只能打包处理一部分的高级 JS 语法。对于那些 webpack 无法处理的高级 JS 语法,需要借助
babel-loader
进行打包处理。 -
安装和配置 babel-loader
打包发布
为什么要打包发布
配置webpack的打包发布
在package.json
的scripts
节点下,新增 build 命令:
--mode
是一个参数选项,用来指定 webpack 的运行模式。"production"代表生产环境。注意:通过
--mode
指定的参数项会覆盖webpack.config.js
中的mode选项
优化图片和js文件的存放位置
按照上面的操作打包发布后,所有的文件都放到了dist
目录下,显得比较杂乱。
js文件
图片
最终结果
-
运行命令
npm run build
-
可以看到dist目录的结构更清晰了
自动清理dist目录下的旧文件
每次用webpack打包发布前,都要手动删除旧的 dist 目录。
为了自动清理掉 dist 目录中的旧文件,我们需要用到插件:clean-webpack-plugin
-
安装
clean-webpack-plugin
npm install -D clean-webpack-plugin
-
CleanWebpackPlugin为什么要加
{}
?(解构赋值)
Source Map
引例
当你的 js 代码出错时
由于 webpack 打包生成的输出 js 文件和你写的 js 文件并不完全一致,报错的也就不是第18行。
这种情况下,debug 就会变得十分困难。
因此我们需要用到Source Map
。
什么是 Source Map
Source Map
就是一个信息文件,里面储存着位置信息。也就是说,Source Map 文件中存储着压缩混淆后的代码,所对应的转换前的位置。
有了它,出错的时候,开发工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。
解决方式
eval-source-map
development
模式下,在webpack.config.js
中添加如下配置:
安全起见,
production
模式下不建议使用此配置。
nosources-source-map
如果希望能够只看到准确的出错行数,而点击文件时不会看到原始代码,可以进行如下配置:
效果如下:
既方便了调试,也保证了安全性(浏览器端无法看到原始代码)。
最佳实践
development
模式下- devtool 的值设置为 'eval-source-map'
production
模式下- 不使用 devtool(关闭 Source Map)
- devtool 的值设置为 'nosources-source-map'
webpack中的'@'
更多:https://blog.csdn.net/yangfengjueqi/article/details/86506813
https://webpack.js.org/configuration/resolve/#resolve-alias
@
是 webpack 设置的路径别名,一般代表src
目录。
可以在webpack.config.js
中进行配置:
在 import 时常常使用@
符号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。