webpack基础使用
1.初始化包环境,自动下载package.json配置文件
yarn init
2.安装依赖包,vue包
yarn add webpack webpack-cli -D
3.在package.json里配置
4.根目录创建src目录,在src目录创建入口函数main.js文件
5.根目录创建配置入口出口webpack.config.js
6.填入配置项
const path = require("path")
module.exports = {
entry: "./src/main.js", // 入口要压缩的文件
output: {
path: path.join(__dirname, "dist"), // 出口路径 压缩成功的文件 压缩好系统自动创建
filename: "bundle.js" // 出口文件名
}
}
案例隔行变色
1.基于基础使用
2.下载jquery, 新建public/index.html
yarn add jquery
3.index.html 准备一些li
4.在src/main.js引入jquery,编写代码
// 引入jquery
import $ from 'jquery'
// 隔行变色代码
$(function() {
$('#app li:nth-child(odd)').css('color', 'red')
$('#app li:nth-child(even)').css('color', 'green')
})
5.执行打包命令观察效果,把js打包了
yarn build
6.在index.html中==手动==引入js
插件-案例自动生成html文件
1.基于隔行变色案例
2.下载插件
yarn add html-webpack-plugin -D
3.配置webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, './dist'),
filename: 'index_bundle.js',
},
plugins: [new HtmlWebpackPlugin({
template:'./public/index.html' //要压缩的html路径
})],
};
4.执行打包命令观察效果
yarn build
注意,打包后index.html自动引入打包后的js文件==
加载器-处理css文件问题
1.基于自动生成html文件
2.安装依赖
yarn add style-loader css-loader -D
3.webpack.config.js 配置
module.exports = {
// ...其他代码
plugins: [new HtmlWebpackPlugin({
template:'./public/index.html'
})],
module: {
rules: [ // loader的规则
{
test: /\.css$/, // 匹配所有的css文件
// use数组里从右向左运行
// 先用 css-loader 让webpack能够识别 css 文件的内容并打包
// 再用 style-loader 将样式, 把css插入到dom中
use: [ "style-loader", "css-loader"]
}
]
}
}
3.新建src/css/li.css - 去掉li默认样式
ul, li{
list-style: none;
}
4.引入到main.js (因为这里是入口需要产生关系, 才会被webpack找到打包起来)
5.执行打包命令观察效果
yarn build
运行打包后dist/index.html观察效果和css引入情况
加载器-处理less事件
1.基于打包css
2.下载依赖包
yarn add less less-loader -D
3.webpack.config.js 配置
module: {
rules: [ // loader的规则
// ...省略其他
{
test: /\.less$/,
// 使用less-loader, 让webpack处理less文件, 内置还会用less翻译less代码成css内容
use: [ "style-loader", "css-loader", 'less-loader']
}
]
}
4.src/less/index.less - 设置li字体大小24px
@size:24px;
ul, li{
font-size: @size
}
5.引入到main.js中
import "./less/index.less"
6.执行打包命令观察效果
yarn build
打包运行dist/index.html 观察效果
加载器-处理图片文件
1.直接配置在webpack.config.js - 的 rules里即可
{
test: /\.(png|jpg|gif|jpeg)$/i, //加入支持的图片格式
type: 'asset'
}
2.新建src/assets/,把图片放入里面
3.在css/less/index.less - 把小图片用做背景图
body{
background: url(../assets/logo_small.png) no-repeat center;
}
4.在src/main.js - 把大图插入到创建的img标签上, 添加body上显示
// 引入图片-使用
import imgUrl from './assets/1.gif'
const theImg = document.createElement("img")
theImg.src = imgUrl
document.body.appendChild(theImg)
5.打包运行dist/index.html观察2个图片区别
加载器-处理字体文件
1.直接配置在webpack.config.js - 的 rules里即可
{ // webpack5默认内部不认识这些文件, 所以当做静态资源直接输出即可
test: /\.(eot|svg|ttf|woff|woff2)$/,
type: 'asset/resource',
generator: {
filename: 'font/[name].[hash:6][ext]' //命名,可以不写
}
}
2.src/assets/ - 放入字体库fonts文件夹
3.在src/main.js -插入字体标签
// 8. 引入字体图标样式文件
import "./img/fonts/iconfont.css"
let theI = document.createElement("e")
theI.className = "iconfont icon-qq"
document.body.appendChild(theI)
4.执行打包命令-观察打包后网页效果
加载器-处理高版本js语法
1.安装包
yarn add -D babel-loader @babel/core @babel/preset-env
2.配置规则
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'] // 预设:转码规则(用bable开发环境本来预设的)
}
}
}
3.在main.js中使用箭头函数(高版本js)
// 高级语法
const fn = () => {
console.log("你好babel");
}
console.log(fn) // 这里必须打印不能调用/不使用, 不然webpack会精简成一句打印不要函数了/不会编译未使用的代码
// 没有babel集成时, 原样直接打包进lib/bundle.js
// 有babel集成时, 会翻译成普通函数打包进lib/bundle.js
4.打包后观察lib/bundle.js - 被转成成普通函数使用了 - 这就是babel降级翻译的功能
开发服务器。自动刷新打包
1.下载包
yarn add webpack-dev-server -D
2.在package.json配置自定义命令,
scripts: {
"build": "webpack",
"serve": "webpack serve"
}
3.运行命令-启动webpack开发服务器
yarn serve
更多配置,开发服务器配置,可以不加
module.exports = {
// ...其他配置
devServer: {
port: 9000, // 端口号
open:true, // //设置自动打开网页
hot:true // 打包更快
}
}
自动打包慢
系统默认是生产环境,可以在webpack.config.js加上mode: 'development'代码,可以改成开发环境,不压缩,打包速度非常快