昨天已经介绍了weback的基础使用了,详细总结看这边博客!!!
今天来总结一下剩余的常用 !!!!
运行如下的命令,即可在项目中安装此插件:
npm i sass sass-loader -D

在 webpack.config.js 写以下代码:
{
test: /\.scss$/,
use: ["style-loader", "css-loader", "sass-loader"]
},

作用:处理scss文件
插件使用去官网搜索,其他的不再赘述


运行如下的命令,即可在项目中安装此插件:
npm install mini-css-extract-plugin -D

在 webpack.config.js 写以下代码:
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
plugins: [new MiniCssExtractPlugin()],
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
],
},
};

作用:把css 抽出为一个单独的文件
运行如下的命令,即可在项目中安装此插件:
npm i css-minimizer-webpack-plugin -D
在 webpack.config.js 写以下代码:
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
module.exports = {
module: {
rules: [
{
test: /.s?css$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
},
],
},
optimization: {
minimizer: [
// 在 webpack@5 中,你可以使用 `...` 语法来扩展现有的 minimizer(即 `terser-webpack-plugin`),将下一行取消注释
// `...`,
new CssMinimizerPlugin(),
],
},
plugins: [new MiniCssExtractPlugin()],
};
optimization.minimize 设置为true:// [...]
module.exports = {
optimization: {
// [...]
minimize: true,
},
};

这个插件使用 cssnano 优化和压缩 CSS。
在
source maps和assets中使用查询字符串会更加准确,支持缓存和并发模式下运行。
运行如下的命令,即可在项目中安装此插件:
npm i terser-webpack-plugin -D

在 webpack.config.js 写以下代码:
const TerserPlugin = require("terser-webpack-plugin");
module.exports = {
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
},
};

该插件使用 terser 来压缩 JavaScript。
在 webpack.config.js 写以下代码:
module.exports = {
resolve: {
alias: {
'@': path.resolve(__dirname, './src'), //设置@为src目录的别名
}
},
};


点击查看 webpack :devtool 教程

在 webpack.config.js 写以下代码:
devtool:"eval-cheap-source-map"

作用:错误与源代码有个一一对应关系
此选项控制是否生成,以及如何生成 source map。
Prefetch是告诉浏览器这是一个在未来可能使用到的资源。
浏览器通常会在空闲状态取得这些资源,在取得资源之后搁在HTTP缓存以便于实现将来的请求。
先安装个jQuery
npm i jquery -S

import时增加一条魔法注释即可:
getJQ(){
import(/* webpackChunkName:"jquery",webpackPrefetch:true */"jquery")
.then(({default:$})=>{
alert($("body").text())
})
}
// 构造函数
render(){
return(<div onClick={this.getJQ}> 你好react 我喜欢你</div>)
}

/*webpackChunkName:"jquery"*/ 给当前的js文件命名
/*webpackPrefetch: true */ 网络有空闲预加载js
在 webpack.config.js 写以下代码:
entry:{
"index":'./src/index.js', //入口
"start":'./src/start.js'
},
output: { //出口
filename: "[name]-[chunkhash].js", //文件名
path: __dirname + "/dist" //文件夹
},
plugins: [
/* 把template 文件拷贝到dist目录并插入打包的js(main.js) */
new HtmlWebpackPlugin({
template: './public/index.html', //模板
chunks:["index"],//入口
filename:'index.html'//文件名
}),
new HtmlWebpackPlugin({
template: './public/start.html',
chunks:["start"],
filename:'start.html'
}),
]

可以同时打包两个或者多个入口文件
通过环境命令 产品环境 压缩代码,是生产环境不压缩代码,打开devtool
项目开发中:
cross-env:运行跨平台设置和使用环境变量的脚本
运行如下的命令,即可在项目中安装此插件:
npm i cross-env -D

在 package.json 中配置如下代码:
"build": "cross-env NODE_ENV=production webpack",
"serve": "cross-env NODE_ENV=development webpack serve",

在 webpack.config.js里配置如下代码:
devtool:process.env.NODE_ENV==="production"?false:"eval-cheap-source-map",
mode:process.env.NODE_ENV,
在js里面使用
if(process.env.NODE_ENV=="production"){
var baseURL = "http://dida100.com:8080"
}else{
var baseURL = "http://localhost:8080"
}
console.log(baseURL)

运行如下的命令,即可在项目中安装此插件:
npm i vue -S
npm i
vue-hot-reload-api
vue-loader
vue-style-loader
vue-template-compiler
-D
vue-hot-reload-api 热更新
vue-loader 处理.vue文件
vue-style-loader 处理样式
vue-template-compiler 编译template

在 webpack.config.js 写以下代码:
01 导入
const { VueLoaderPlugin } = require('vue-loader')
---
02配置
rules: [{ test: /\.vue$/, use: ['vue-loader'] }]
---
03插件
plugins: [new VueLoaderPlugin()]

<div id="app">div>
mport { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')//创建App并挂载
<template>
<div>
<h1>你好vue3h1>
<p>{{msg}}p>
<input type="text" v-model="msg" />
<button @click="num++">{{num}}button>
div>
template>
<script>
export default{
data(){
return{
msg:"有饭吃才是王道",
num:5
}
}
}
script>


js<script defer src="">script>
css<link href="" rel=prefetch>
Hash、ContentHash、ChunkHash
- 浏览器对get请求有缓存,如果请求地址(文件名)没有发生变化,那么文件会在一定时间内缓存
- 如果内容变化我们又希望文件不缓存,这个时候我们可根据内容来命名文件 实现缓存控制
- logo,jquery,等常见的库应该是需要缓存的
hash 值的生成和整个项目有关系:chunkhash可以有效的解决上面的问题,它会根据不同的入口进行解析来生成hash值:contenthash表示生成的文件hash名称,只和内容有关系:hash命名
- 可以控制浏览器的缓存,当文件发生变化的时候,hash就变化,文件名也就变化,浏览器就不缓存,当文件名保持不变,浏览器二次请求会从缓存里面去请求内容
- 提供二次加载的速度(有效的控制缓存)

[hash] 把内容通过hash 算法算出来的一串字符
[hash:7] 取hash 字符串前7个
只要项目内容发送变化,hash就会变化

[contenthash] 内容发生变化,contenthash 才会发生变化

[chunkhash] 入口发生变化,当前的文件 chunkhash 会变化

webpack 笔记的分享就到这里了,欢迎大家一起交流学习和分享~