webpack基础使用
一、webpack本质是一个第三方模块包,用于分析,并打包代码。
1、支持所有类型文件的打包
2、支持less/sass =>css
3、支持ES6/7/8 =>ES5
4、压缩代码,提高加载速度
二、使用步骤
1、环境准备①②③
①初始化包环境
yarn init
②安装依赖包
yarn add webpack webpack-cli -D
③配置scripts(自定义命令)
"scripts": {
"build":"webpack"
},
2、合并两个js文件
④新建目录src
⑤新建src/add/add.js 定义求和函数导出
export const addFn = (a,b) => a+b
⑥新建src/index.js导入使用
import {addFn} from './add/add'
console.log(addFn(10,20))
⑦运行打包命令
yarn build
或者 npm run build
三、更新打包
1、新建src/tool/tool.js - 定义导出数组求和方法
export const getArrSum = arr => arr.reduce((sum, val) => sum += val, 0)
2、src/index.js - 导入使用
import {addFn} from './add/add'
import {getArrSum} from './tool/tool'
console.log(addFn(10, 20));
console.log(getArrSum([1, 2, 3]));
3、重新打包
四、定义入口和出口
1、新建src并列处, 👍webpack.config.js👍
2、填入配置项
const path = require("path")
module.exports = {
entry: "./src/main.js", // 入口
output: {
path: path.join(__dirname, "dist"), // 出口路径
filename: "bundle.js" // 出口文件名
}
}
3、修改package.json, 自定义打包命令 - 让webpack使用配置文件
"scripts": {
"build": "npx webpack"
},
4、打包
总结: 前端工程化模块化, 需要的包yarn下, 被webpack打包后引入到html中使用
五、自动生成HTML文件(只是单纯添加打包后的js文件)
1、在终端中下载插件
yarn add html-webpack-plugin -D
2、在webpack.config.js中配置
// 引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// ...省略其他代码
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html' // 以此为基准生成打包后html文件
})
]
}
3、重新打包后观察dist下是否多出html并运行看效果
总结: webpack就像一个人, webpack.config.js是人物属性, 给它穿什么装备它就干什么活
六、loader加载器 - 处理css文件:可让webpack处理其他类型的文件, 打包到js中
1、在终端中安装依赖
yarn add style-loader css-loader -D
2、在webpack.config.js中配置
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// ...其他代码
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
4、引入到main.js (因为这里是入口需要产生关系, 才会被webpack找到打包起来)
import "./css/index.css"
5、运行打包后dist/index.html观察效果和css引入情况
总结: 万物皆模块, 引到入口, 才会被webpack打包, css打包进js中, 然后被嵌入在style标签插入dom上
七、loader加载器 - 处理less文件
1、在终端中安装依赖
yarn add less less-loader -D
2、在webpack.config.js中配置
module: {
rules: [ // loader的规则
// ...省略其他
{
test: /\.less$/,
// 使用less-loader, 让webpack处理less文件, 内置还会用less翻译less代码成css内容
use: [ "style-loader", "css-loader", 'less-loader']
}
]
}
3、src/less/index.less
4、引入到main.js中
import "./less/index.less"
5、打包运行dist/index.html 观察效果
总结: 只要找到对应的loader加载器, 就能让webpack处理不同类型文件
八、loader加载器 - 处理图片文件
1、webpack5版本, 直接配置在webpack.config.js - 的 rules里
{
test: /\.(png|jpg|gif|jpeg)$/i,
type: 'asset'
}
2、webpack4及以前的, 使用如下配置
①在终端中安装依赖
yarn add url-loader file-loader -D
②在webpack.config.js中配置
{
test: /\.(png|jpg|gif|jpeg)$/i,
use: [
{
loader: 'url-loader', // 匹配文件, 尝试转base64字符串打包到js中
// 配置limit, 超过8k, 不转, file-loader复制, 随机名, 输出文件
options: {
limit: 8 * 1024,
},
},
],
}
图片转成 base64 字符串
Ⅰ、好处就是浏览器不用发请求了,直接可以读取
Ⅱ、坏处就是如果图片太大,再转base64就会让图片的体积增大 30% 左右
③src/assets/准备老师发的2个图文件
④在css/less/index.less - 把小图片用做背景图
body{
background: url(../assets/logo_small.png) no-repeat center;
}
⑤在src/main.js - 把大图插入到创建的img标签上, 添加body上显示
// 引入图片-使用
import imgUrl from './assets/1.gif'
const theImg = document.createElement("img")
theImg.src = imgUrl
document.body.appendChild(theImg)
⑥打包运行dist/index.html观察2个图片区别
总结: url-loader 把文件转base64 打包进js中, 会有30%的增大, file-loader 把文件直接复制输出