一、提取打包后的css文件为单独文件
使用的插件:mini-css-extract-plugin
第一步:下载并引入插件
//下载命令 npm i mini-css-extract-plugin //引入插件 const MiniCssExtractPlugin = require('mini-css-extract-plugin')
第二步:使用插件
new MiniCssExtractPlugin({ filename: 'css/built.[contenthash:10].css'//对输出的文件进行重命名 }),第二步:在样式的loader配置中使用MiniCssExtractPlugin.loader
{ test: /\.less$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'less-loader' ] },
二、css兼容性处理
使用的loader:postcss
使用的插件:postcss-preset-env
1.下载loader和插件
npm i postcss-loader postcss-preset-env
2.创建postcss.config.js文件
module.exports = { plugins: [ require('postcss-preset-env') ] }
3.在css的loader中新增:postcss-loader
{ test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', ], },
4.设置node环境变量
切换不同环境下的兼容性
process.env.NODE_ENV = 'development'
5.在package.json中配置browserslist
"browerslist": { "developement": [//开发环境 "last 1 chorme version", "last 1 firefox version", "last 1 safari version" ], "production": [//生产环境 ">0.2%", "not dead", "not op_mini all" ] }
三、压缩css
使用的插件:optimize-css-assets-webpack-plugin
1.下载和引入插件
npm i optimize-css-assets-webpack-plugin const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
2.使用插件
new OptimizeCssAssetsWebpackPlugin()
四、js语法检查
使用的loader:eslint-loader eslint(eslent-loader依赖于eslint)
注意:只检查自己写的源代码,第三方库的代码不用检查,使用eslint-disable-next-line可以使eslint的规则失效(下一行不进行eslint检查,要使用//注释的方式表示)
此处使用的检查规则是airbnb,所以需要用到:eslint-config-airbnb-base eslint-plugin-import eslint
1.下载
npm i eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import
2.配置loader
{ test: /\.js$/, exclude: /node_modules/,//排除node_modules下的文件 loader: 'eslint-loader', options: { fix: true//自动修复eslint的错误 } }
3.在package.json中配置相应内容
"eslintConfig":{ "extends": "airbnb-base", "env":{ "browser":true//让eslint认识像navigator window这样的全局变量 } }
五、js兼容性处理
1.基本的兼容性处理
使用的loader和插件:babel-loader @babel-core @babel/preset-env
问题:只能转换基本语法,如promise不能转换
(1)下载
npm i babel-loader @babel-core @babel/preset-env
(2)配置
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', options: { presets: ['@babel/preset-env']//预设,只是babel做怎么样的兼容性处理 } }
2.全部兼容性处理
涉及到的loader和插件(库): @babel/polyfill
注意:会将js有关兼容性的东西全部纳入,将浏览器不能识别的方法直接定义好挂载到相应的对象上,比如Array、Object...,无论浏览器能否识别都可以用
问题:如果只需要解决部分兼容性问题,但是却将所有兼容性代码引入,体积太大
(1)下载
npm i @babel/polyfill
(2)只需要在入口文件中引入@babel/ployfill即可
import "@babel/ployfill"
3.按需兼容性处理
使用的loader和插件(库):babel-loader @babel/core @babel/preset-env core-js
(1)下载
npm i babel-loader @babel-core @babel/preset-env core-js
(2)配置loader
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', options: { presets: [ [ '@babel/preset-env',//预设,只是babel做怎么样的兼容性处理 { useBuiltIns: 'usage',// 按需加载 corejs: {//指定core-js的版本 version: 3 }, targets: {//指定兼容性到浏览器的哪个版本 chrome: '60', firefox: '60', ie: '9', safari: '10', edge: '17' } } ] ], } }
六、js/html压缩
1.js压缩
将mode设置为production
2.HTML压缩
设置html-webpack-plugin插件
new HtmlWebpackPlugin({ template: './src/index.html', minify: {//压缩html代码 collapseWhitespace: true,//清除空格 removeComments: true//清除注释 } }),