一.文件出入口初始配置
注:导入node.js的path模块以便于快速进行根目录路径地址的拼接
二.实现自动打包
注:改成bundle的原因是设置每次打包后实现自动打开服务器网页的入口文件。
三.配置html-webpack-plugin
使用html-webpack-plugin 可以生成一个预览页面。
因为当我们访问默认的 http://localhost:8080/的时候,看到的是一些文件和文件夹,想要查看我们的页面
还需要点击文件夹点击文件才能查看,那么我们希望默认就能看到一个页面,而不是看到文件夹或者目录。
实现默认预览页面功能的步骤如下:
A.安装默认预览功能的包:html-webpack-plugin
npm install html-webpack-plugin -D
B.修改webpack.config.js文件,如下:
//导入包
const HtmlWebpackPlugin = require("html-webpack-plugin");
//创建对象
const htmlPlugin = new HtmlWebpackPlugin({
//设置生成预览页面的模板文件
template:"./src/index.html",
//设置生成的预览页面名称
filename:"index.html"
})
C.继续修改webpack.config.js文件,添加plugins信息:
module.exports = {
......
plugins:[ htmlPlugin ]
}
四.配置loader打包非js文件。
1.通过loader打包非js模块:默认情况下,webpack只能打包js文件,如果想要打包非js文件,需要 调用loader加载器才能打包
loader加载器包含:
1).less-loader:打包处理less语法的文件
2).sass-loader:打包处理sass语法的文件
3).url-loader:打包处理css中与url路径有关的文件,内置file-loader可以打包图片和字体文件
4).babel-loader:处理高级js语法的加载器
5).postcss-loader:自动配置浏览器兼容性前缀
6).css-loader,style-loader:打包css样式文件
注意:指定多个loader时的顺序是固定的,而调用loader的顺序是从后向前进行调用。
A.安装style-loader,css-loader来处理样式文件
1).安装包
npm install style-loader css-loader -D
2).配置规则:更改webpack.config.js的module中的rules数组
module.exports = {
......
plugins:[ htmlPlugin ],
module : {
rules:[
{
//test设置需要匹配的文件类型,支持正则
test:/\.css$/,
//use表示该文件类型需要调用的loader
use:['style-loader','css-loader']
}
]
}
}
B.安装less,less-loader处理less文件
1).安装包
npm install less-loader less -D
2).配置规则:更改webpack.config.js的module中的rules数组
module.exports = {
......
plugins:[ htmlPlugin ],
module : {
rules:[
{
//test设置需要匹配的文件类型,支持正则
test:/\.css$/,
//loader表示该文件类型需要调用的loader
loader:['style-loader','css-loader']
},
{
test:/\.less$/,
loader:['style-loader','css-loader','less-loader']
}
]
}
}
C.安装sass-loader,node-sass处理less文件
1).安装包
npm install sass-loader node-sass -D
2).配置规则:更改webpack.config.js的module中的rules数组
module.exports = {
......
plugins:[ htmlPlugin ],
module : {
rules:[
{
//test设置需要匹配的文件类型,支持正则
test:/\.css$/,
//use表示该文件类型需要调用的loader
loader:['style-loader','css-loader']
},
{
test:/\.less$/,
loader:['style-loader','css-loader','less-loader']
},
{
test:/\.scss$/,
loader:['style-loader','css-loader','sass-loader']
}
]
}
}
D.安装post-css自动添加css的兼容性前缀(-ie-,-webkit-)
1).安装包
npm install postcss-loader autoprefixer -D
2).在项目根目录创建并配置postcss.config.js文件
const autoprefixer = require("autoprefixer");
module.exports = {
plugins:[ autoprefixer ]
}
3).配置规则:更改webpack.config.js的module中的rules数组
module.exports = {
......
plugins:[ htmlPlugin ],
module : {
rules:[
{
//test设置需要匹配的文件类型,支持正则
test:/\.css$/,
//use表示该文件类型需要调用的loader
loader:['style-loader','css-loader','postcss-loader']
},
{
test:/\.less$/,
loader:['style-loader','css-loader','less-loader']
},
{
test:/\.scss$/,
loader:['style-loader','css-loader','sass-loader']
}
]
}
}
E.打包样式表中的图片以及字体文件
在样式表css中有时候会设置背景图片和设置字体文件,一样需要loader进行处理
使用url-loader和file-loader来处理打包图片文件以及字体文件
1).安装包
npm install url-loader file-loader -D
2).配置规则:更改webpack.config.js的module中的rules数组
module.exports = {
......
plugins:[ htmlPlugin ],
module : {
rules:[
{
//test设置需要匹配的文件类型,支持正则
test:/\.css$/,
//loader表示该文件类型需要调用的loader
loader:['style-loader','css-loader']
},
{
test:/\.less$/,
loader:['style-loader','css-loader','less-loader']
},
{
test:/\.scss$/,
loader:['style-loader','css-loader','sass-loader']
},{
test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
//limit用来设置字节数,只有小于limit值的图片,才会转换
//为base64图片
loader:"url-loader?limit=16940"
}
]
}
}
F.打包js文件中的高级语法:在编写js的时候,有时候我们会使用高版本的js语法
有可能这些高版本的语法不被兼容,我们需要将之打包为兼容性的js代码
我们需要安装babel系列的包
A.安装babel转换器
npm install babel-loader @babel/core @babel/runtime -D
B.安装babel语法插件包
npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
C.在项目根目录创建并配置babel.config.js文件
module.exports = {
presets:["@babel/preset-env"],
plugins:[ "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties" ]
}
D.配置规则:更改webpack.config.js的module中的rules数组
module.exports = {
......
plugins:[ htmlPlugin ],
module : {
rules:[
{
//test设置需要匹配的文件类型,支持正则
test:/\.css$/,
//loader表示该文件类型需要调用的loader
loader:['style-loader','css-loader']
},
{
test:/\.less$/,
loader:['style-loader','css-loader','less-loader']
},
{
test:/\.scss$/,
loader:['style-loader','css-loader','sass-loader']
},{
test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
//limit用来设置字节数,只有小于limit值的图片,才会转换
//为base64图片
loader:"url-loader?limit=16940"
},{
test:/\.js$/,
loader:"babel-loader",
//exclude为排除项,意思是不要处理node_modules中的js文件
exclude:/node_modules/
}
]
}
}