Webpack4.X使用
基本配置
创建文件夹
创建一个根文件夹和一个 dist 子文件夹一个名为 src子文件,在src子文件夹下创建一个.html文件和一个.js入口文件。
- 根文件夹
- dist文件夹
- src文件夹
- index.html
- main.js
注意:
- src文件夹是我们的工程文件夹,我们所用的文件都要在这个文件夹里。
- dist文件夹是我们最后打包输出的文件夹。(也可以不用建,webpack会自动帮我们创建)
初始化
在终端中运行命令
1 | npm init -y |
进行文件夹的初始化,然后会出现我们的package.json
文件。
安装插件
在本地下载 webpack
,webpack-cli
,webpack-dev-server
,这三个包
运行的命令:
1 | cnpm i webpack webpack-cli webpack-dev-server -D |
设置快捷启动命令
在 package.json 文件的 scripts 对象里,添加
1 | "start":"webpack --config webpack.config.js" |
这样就可以直接在终端中使用命令 npm start 运行。
webpack 会默认在你的根目录下找 webpack.config.js 文件,所以我们可以把命令简写成 “start” : “webpack”
创建配置文件
在根目录下新建配置文件 webpack.config.js
1 | const path = require('path') // 引用node包里的path工具 |
运行 npm start ,webpack 就会为我们自动打包,并自动创建 dist 文件夹,生成bundle.js
注意:如果此时,我们在html文件里通过script标签引入bundle.js话,我们就已经可以看到效果了,当然我们需要在js文件里,写上一句console.log("Hello webpack")
。如果能输出,这也证明,到现在为止,我们的使用是没有错误的。
配置loader
配置css-loader加载样式
在html文件中写一个
<div class="box">hello world</div>
【主要是为了看效果,写啥都行】在src文件夹下,新建一个
style.css
文件,里面写上你喜欢的box
的样式。在js文件中引入.css文件,
import './style.css'
(此时打包绝对失败)安装两个包
style-loader,css-loader
运行的命令:
cnpm i style-loader css-loader -D
在
webpack.config.js
文件中配置规则:1
2
3
4
5module:{
rules:[ //这里匹配的是规则
{test:/\.css$/,use:['style-loader','css-loader']} //这是一个正则表达式:匹配到以.css结尾的文件,以这两个loader来解析
]
}注意:这个 module对象 和前面的 配置出口文件 的对象是平级的。
此时,运行
npm start
打包后,即可在页面中看到效果。
配置file-loader加载图片
如果我们直接在.html文件里,使用src=“”引入文件,可能就会出现文件无法打包解析的情况。
如果我们在css文件里,通过background:url(),引入图片,打包会直接报错,此时我们就需要这个
file-loader
。运行命令:
1
cnpm i file-loader -D
在
webpack.config.js
里的rules
里配置规则:1
{test:/\.(png|svg|jpg|gif|webp)$/,use:'file-loader'}// 匹配到图片文件,以file-loader来解析。
此时,运行
npm run build
即可发现图片显示出来了。
使用Webpack-dev-server自动更新
前面说基本配置的时候,已经下载过webpack-dev-server
这个包了,所以这里直接去配置。
首先在
webpack.config.js
文件里,新建一个devServer:{}
对象。注意:这个对象,也是直属于
module.exports = {}
里。1
2
3
4
5
6devServer:{
contentBase:'./src',// 自动打包显示的文件路径,会自动找到src文件夹下的index.html文件
hot:true,// 启用热更新
port:3000, // 启用的端口号
open:true // 自动打开浏览器
}配置 package.json 文件,在这个文件的 scripts 对象里写上
1
"build":"webpack-dev-server"
此时,我们就不需要再去运行npm start打包了,直接运行npm run build启动webpack-dev-server即可。甚至于,我们可以直接把start后面的webpack替换成我们的webpack-dev-server
当然这个时候,我们是可以直接去运行webpack-dev-server了,但是启动成功后,当你在浏览器,访问
http://localhost:3000
的话,你会发现没有效果,连绿色的样式效果都没了。问题就出在引用
bundle.js
的路径上.验证方法:
我们把本地dist里的bundle.js删除,你会发现页面还是会显示,还是报的一样的错误。
所以,我们要更改引入的bundle.js的路径,webpack-dev-server在运行的时候,其实帮我们把bundle.js托管到了内存里,既然这样,我们运行的时候,直接引入即可,不用搞那么多复杂的路径。
1
<script src="bundle.js"></script>
这样,我们在运行的时候,就会发现样式回来了。
不用停止webpack-dev-server,直接去更改样式,保存之后在浏览器里刷新,你就会发现,样式也自动帮我们打包了
顺带提一句,要想停止
webpack-dev-server
,使用ctrl+c
,然后输入Y
即可。
使用html-webpack-plugin插件
要使用
html-webpack-plugin
插件,首先要先下载插件。运行命令:
cnpm i html-webpack-plugin -D
接着在
webpack.config.js
里进行插件的配置。首先要引入插件:
1
const HtmlWebpackPlugin = require('html-webpack-plugin')
接着,配置插件信息:
1
2
3
4
5
6plugins:[
new HtmlWebpackPlugin({
filename:'index.html',// 插件打包后输出的文件名
template:'./src/index.html' // 插件打包文件的路径
})
]注意:plugins数组也是直属于
module.exports = {}
这样我们在运行
npm run build
时,就可以看到效果。其实这个插件是把我们的html页面也托管到了内存里,实现页面的自动实时刷新。如果我们查看网页源代码,你就会发现,它帮我们自动引入了bundle.js文件。
此时我们在引入bundle.js就显得多余了,直接删除在.html文件里引入的即可。
使用babel转换ES6语法
要使用
babel
,首先要下载三个包,分别是babel-loader,@babel/core,@babel/preset-env
运行命令:
1
cnpm i babel-loader @babel/core @babel/preset-env -D
提示:我们下载的是
7.X
的版本,babel-loader是 8.X
命令中,千万不要写成babel-core,babel-preset-env
这样的写法,是babel6.X
的版本,和webpack4.X
以及babel-loader8.X
版本不符。下载完成之后,配置我们的
webpack-config.js
文件:在我们的
rules
数组规则里添加:1
2
3
4
5
6
7
8
9
10{
test: /\.js$/,
exclude: /node_modules/, //由于babel转换比较消耗性能,并且node_modules的文件比较多,也并不需要转换,所以要排除
use: [{
loader: 'babel-loader',
options: {
presets:['@babel/preset-env'] //可以根据配置的目标浏览器或者运行环境来自动将ES2015+的代码转换为es5。
}
}]// 这里配置的是babel转换ES6语法的规则
}配置完成之后,我们测试一下:在.html文件里写上一个按钮:
1
<input type="button" value="点击" id="ipt">
在我们的.js文件里,用一下箭头函数:
1
2var ipt = document.getElementById('ipt');
ipt.onclick = () => alert(123);npm run build
运行之后,打包成功,点击按钮,会发现弹窗也正常显示。
小结
到这里,我们的webpack基本配置就算结束了,但是这样,你有可能也是只知道,webpack怎么做成可以让页面自动刷新,自动帮我们打包,解析ES6语法等等。建议大家,可以在读完这篇博客后,找一个自己写的小项目,比如一个简单的登录注册,去实地的测试一下webpack打包。当然webpack还有许许多多其他的地方,大家可以去看看webpack官网。