什么是webpack?
本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。
主要功能
兼容问题
解决Javascript高级语法
在低版本浏览器
的兼容问题。
我们可以放心使用高级的语法,webpack会在运行时自动转换成
兼容的语法。
性能优化
规范化代码
代码压缩混淆
基本使用
安装和配置
安装至devDependencies
节点中,仅在开发阶段中使用。
1 | npm i webpack webpack-cli -D |
在项目根目录
创建webpack.config.js
配置文件。
1 | module.exports={ |
在package.json
中的scripts
节点,新增dev脚本
。
1 | "scripts":{ |
webpack中的默认约定
webpack 4.x和5.x的版本中,有如下的默认约定:
- 默认的打包入口文件为
src
->index.js
- 默认的输出文件路径为
dist
->main.js
默认约定可以在webpack.config.js
中进行修改。
创建列表隔行变色项目
js
1 | import $ from 'jquery' |
html
1 |
|
第一个报错:
Uncaught SyntaxError: Cannot use import statement outside a module
问题出在js
第一行import $ from 'jquery'
解决方案:
1 | npm run webpack |
修改导入文件
1 | <script src="../dist/main.js"></script> |
使用代码压缩混淆
将配置文件webpack.config.js
中的mode
修改为production
1 | module.exports={ |
压缩时间较长,一般不会在开发阶段使用。
修改默认约定
在webpack.config.js
中进行修改。
entry:设置入口文件。
output:设置输出文件的目录和文件名。
1 | const path=require('path'); |
webpack插件
插件的作用
第三方插件能够拓展webpack的能力。
webpack-dev-server
1 | npm i webpack-dev-server |
- 类似node.js节点使用nodemon工具
- 每当修改源代码,webpack会自动进行项目的打包和构建
webpack-dev-server打包的js文件存储在内存
中。
html-webpack-plugin
1 | npm i html-webpack-plugin |
- webpack中的HTML插件(类似于一个模板引擎插件)
- 可以通过该插件自定义index.html页面的内容
1 | const path=require('path'); |
devServer节点
在webpack.config.js
中配置。
可以配置自动打开浏览器、设置端口号、IP地址等。
1 | devServer:{ |
webpack loader
webpack默认只能处理js
文件。
webpack处理不了的,需要调用loader
加载器才能正常打包。
loader用于协助webpack打包处理特定的文件模块。
- css-loader
- less-loader
- babel-loader
使用和配置css-loader
1 | npm i style-loader css-loader -D |
配置webpack.config.js
文件。新增module
节点。
1 | module: {//所有使用第三方文件模块的匹配规则 |
使用和配置url-loader、file-loader
用于处理样式表中与url路径相关的文件。
1 | npm i url-loader file-loader -D |
在webpack.config.js
中配置rules
。
1 | module: {//所有使用第三方文件模块的匹配规则 |
?
为loader的参数项:limit用于指定图片的大小,单位是字节。当图片小于等于limit时,url会被转换为base64
格式。
使用和配置babel-loader
应用于webpack都处理不了的js文件。
1 | npm i babel-loader @babel/core @babel/plugin-proposal-decorators -D |
配置webpack.config.js
文件。
1 | module: {//所有使用第三方文件模块的匹配规则 |
创建babel.config.js
配置一些插件,如:用于处理修饰器的@babel/plugin-proposal-decorators
插件。
1 | module.exports={ |
js
1 | import $ from 'jquery' |
clean-webpack-plugin
用于自动删除旧的dist
文件。
1 | npm install --save-dev clean-webpack-plugin |
修改webpack.config.js
文件。
1 | const { CleanWebpackPlugin } = require('clean-webpack-plugin'); |
打包发布
将原本在内存
中的文件保存到磁盘
中。
在package.json
文件中的scripts
脚本中,新增build
命令。
1 | "scripts": { |
不添加mode参数也能实现打包,加上后可实现压缩混淆。
分类存放
将所有js
文件放在js目录
。
修改webpack.config.js
配置文件。在filename
中添加目录js/
。
1 | output: { |
将所有的图片
资源放在images目录
。
修改webpack.config.js
文件。添加outputPath
参数,使用&
进行连接。
1 | module: {//所有使用第三方文件模块的匹配规则 |
Source Map
SourceMap存储着错误在源文件
的位置信息。
修改webpack.config.js
配置文件,开启SourceMap。
1 | module.exports = { |
devtool:'eval-source-map'
在生成环境下,为了安全建议关闭SourceMap,也可以设置成只定位行号,不暴露源码。
1 | devtool:'nosources-source-map', |
@在webpack中的使用
@
表示src
目录,如:import xxx from @/css/index.css
一键生成webpack项目
如何自动生成?