#博学谷IT学习技术支持#
目录
webpack基本概念
webpack的安装
webpack的配置
入口和出口相关配置
插件-自动生成html文件
加载器 - 处理css文件问题
加载器 - 处理图片文件
加载器 - 处理字体文件
加载器 - 处理高版本js语法
webpack 开发服务器
作用:
// 初始化包环境
yarn init
// 安装依赖包
yarn add webpack webpack-cli -D
// 配置scripts(自定义命令) 在packjson文件中配置
scripts: {
"build": "webpack"
}
默认入口: ./src/index.js
默认出口: ./dist/main.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": "webpack"
},
4.在终端中输入 yarn build 即可完成打包
html-webpack-plugin插件, 让webpack打包后生成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文件
})
]
}
重新打包后观察dist下是否多出html并运行看效果
打包后的index.html自动引入打包后的js文件
1.新建 - src/css/index.css
2.编写css样式
3. 一定要引入到入口才会被webpack打包
4.执行打包命令观察效果
因为webpack默认只认识 js 文件和 json文件,使用loaders加载器, 可让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 - 去掉li默认样式
ul, li{
list-style: none;
}
4.引入到main.js (因为这里是入口需要产生关系, 才会被webpack找到打包起来)
import "./css/index.css"
在终端中输入 yarn build 运行打包后dist/index.html观察效果和css引入情况
用asset module方式(webpack5版本新增)
如果使用的是webpack5版本的, 直接配置在webpack.config.js - 的 rules里即可
{
test: /\.(png|jpg|gif|jpeg)$/i,
type: 'asset'
}
用asset module技术, asset/resource直接输出到dist目录下
webpack5使用这个配置
{ // webpack5默认内部不认识这些文件, 所以当做静态资源直接输出即可
test: /\.(eot|svg|ttf|woff|woff2)$/,
type: 'asset/resource',
generator: {
filename: 'font/[name].[hash:6][ext]'
}
}
让webpack对高版本 的js代码, 降级处理后打包
高版本的js代码(箭头函数), 打包后, 直接原封不动打入了js文件中, 遇到一些低版本的浏览器就会报错
webpack 默认仅内置了 模块化的 兼容性处理
// 引入字体图标文件
import './assets/fonts/iconfont.css'
2.配置规则
module: {
rules: [
{
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降级翻译的功能
每次修改代码, 都需要重新 yarn build 打包, 才能看到最新的效果, 实际工作中, 打包 yarn build 非常费时 (30s - 60s) 之间
为什么费时?
构建依赖
磁盘读取对应的文件到内存, 才能加载
用对应的 loader 进行处理
将处理完的内容, 输出到磁盘指定目录
webpack开发服务器可以在电脑内存中打包, 缓存一些已经打包过的内容, 只重新打包修改的文件, 最终运行加载在内存中给浏览器使用
yarn add webpack-dev-server -D
scripts: {
"build": "webpack",
"serve": "webpack serve"
}
yarn serve
#或者 npm run serve
每次运行 yarn serve 命令就会把修改后的文件直接更新到内存打包, 然后反馈到浏览器上了