webpack5
学习
webpack.config.js
配置
entry
入口文件配置,
webpack
依据该配置文件进行打包module.exports={ ... // 入口文件,从哪个文件开始打包 entry: "./src/index.js", ...}
output
打包后的输入地位
const {resolve}=require("path")module.exports={ output: { // 打包后的文件名字 filename: "build.js", // 打包的绝对路径 path: resolve(__dirname, "build"), },}
loader
- 把浏览器不意识的文件翻译成浏览器可能意识的文件,例如将less文件翻译成
css
文件等等 解决
css
的loader
npm i css-loader style-loader
module.exports={ ... //装置css-loader style-loader module: { rules: [ { // 匹配哪些文件,通常是用正则表达式 test: /\.css$/, // use的执行程序是从右到左,从下到上 use: [ // 创立style标签,将js中的款式插入到style外面,而后将style外面的款式插入到head标签当中 "style-loader", // 将css解决成commonjs模块,外面的内容是款式字符串。 "css-loader", ], }, ], }, ... }
2.解决less
的loader
npm i less less-loader
module.exports={ ... // loaders配置 module: { rules: [ // 解决less文件,不同的文件要用不同的loader { test: /\.less$/, use: [ "style-loader", "css-loader", // 将less文件翻译成css文件 "less-loader", ], }, ], }, ...}
3.解决图片资源
装置file-loader url-loader
npm i file-loader url-loader
module.exports={ ... { test: /\.(png|jpg|gif)$/, // 须要下载url-loader 和file-loader loader: "url-loader", options: { // 图片小于 10kb,会被 base64解决 // 长处:缩小申请数量(加重服务器压力) // 毛病:图片体积会更大(文件申请速度更慢) limit: 3 * 1024, // 问题:url-loader默认应用es6模块化解析,而html-loader引入图片是commonjs,解析时会呈现问题:[object Module] // 解决:敞开url-loader的es6模块化,应用commonjs解析 esModule: false, // 给图片重命名 // [hash:6] 取图片的hash的前6位 // [ext] 取文件原来的扩展名 // name: "[name].[hash:6][ext]", }, type: "javascript/auto",//用老版本写法 }, ...}
4.解决html
文件中引入图片的问题
装置html-loader
npm i html-loader
module.exports={ ... // 解决html中的img图片引入问题 { test: /\.html$/, loader: "html-loader", }, ...}
5.解决其余资源(iconfont
图标)
module.exports={ ... // 解决其余资源(除了js,html,css)以外的资源 { exclude: /\.(css|js|html)$/, loader: "file-loader", options: { //解决:敞开url-loader的es6模块化,应用commonjs解析 esModule: false, outputPath: "icon/", }, type: "javascript/auto", }, ... }
6.解决css
款式前缀
npm i postcss-loader postcss-preset-env
// process.env.NODE_ENV="development"//设置运行环境module.exports = { ... module: { rules: [ { test: /\.css$/, use: [ // "style-loader", MiniCssWxtractPlugin.loader, "css-loader", { loader: 'postcss-loader', // options: { // ident: 'postcss', // plugins: () => [ // require('postcss-preset-env')() // ] // } } ], }, { test: /\.less$/, use: [ // "style-loader", MiniCssWxtractPlugin.loader, "css-loader", "postcss-loader", "less-loader", ], }, ], },...};
package.json
退出以下配置
"browserslist": { "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ], "production": [ ">0.2%", "not dead", "not op_mini all" ]}
在webpack.config.js
同级新建postcss.config.js
配置如下
module.exports = { plugins: [ [ //postcss-preset-env插件读取package.json文件中的browserslist配置 require("postcss-preset-env")(), ], ],};
7.解决js
兼容性问题
module.exports = { module: { rules: [ //js的兼容解决 //须要下载babel-loader @babel/preset-env @babel/core @babel/polyfill { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader", options: { presets: [ [ "@babel/preset-env", { useBuiltIns: "entry", corejs: { version: 3, }, // targets: { // } }, ], ], }, }, ], },};
plugins
利用插件解决更简单的逻辑,例如压缩文件等等
1.解决
html
模板装置
html-webpack-plugin
npm i html-webpack-plugin
const HtmlWebpackPlugin = require("html-webpack-plugin"); module.exports={ .... // plugins配置 plugins: [new HtmlWebpackPlugin( { template:'./index.html', //压缩html代码 minify: { collapseWhitespace: true, removeComments:true } } )], .... }
2.将
css
文件提取到独自的文件装置
npm i mini-css-extract-plugin
插件const MiniCssWxtractPlugin=require('mini-css-extract-plugin')module.exports = { ... module: { rules: [ { test: /\.css$/, use: [ // "style-loader", MiniCssWxtractPlugin.loader, "css-loader", ], }, { test: /\.less$/, use: [ // "style-loader", MiniCssWxtractPlugin.loader, "css-loader", "less-loader", ], }, ], }, plugins: [ new MiniCssWxtractPlugin({ filename: "css/index.css", }), ], ...};
3.压缩
css
插件装置
css-minimizer-webpack-plugin
npm i css-minimizer-webpack-plugin
const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin");module.exports = { plugins: [ new CssMinimizerWebpackPlugin({ test: /\.css$/g, }), ],};
mode
我的项目的环境模式分为development和production模式
module.expots={ ... // 模式 mode: "development",//分为development和production模式,production模式下会进行代码压缩 ...}
webpack
打包命令
webpack 入口文件 -o 输出文件地址 --mode=production/development
1.webpack
能够解决js、json
文件,不能解决css
、图片文件(须要装置loader或者插件)
2.生产环境打包生成的文件会压缩,而开发环境不会压缩
3.能够解决es6
模块化。
devServer
装置webpack-dev-server
npm i webpack-dev-server
module.exports={ ... devServer: { // 打包后的地址 static: resolve(__dirname, "build"), // 端口号 port: 3000, // 开启热更新 hot: true, // 开启gzip压缩 compress: true, // 监听模板,用于自动更新浏览器 watchFiles: ["./index.html"], }, ...}
启动命令
webpack serve
或者npx webpack-dev-server