一、提取 css 成单独文件

导入插件: const MiniCssExtractPlugin = require('mini-css-extract-plugin');

  1. module: {
  2. rules: [
  3. {
  4. test: /\.css$/,
  5. use: [
  6. // 这个loader取代style-loader。作用:提取js中的css成单独文件
  7. MiniCssExtractPlugin.loader,
  8. // 将css文件整合到js文件中
  9. 'css-loader'
  10. ]
  11. }
  12. ]
  13. },
  14. plugins: [
  15. new HtmlWebpackPlugin({
  16. template: './src/index.html'
  17. }),
  18. new MiniCssExtractPlugin({
  19. // 对输出的css文件进行重命名
  20. filename: 'css/built.css'
  21. })
  22. ],

二、css 兼容性处理

设置nodejs环境变量:process.env.NODE_ENV = 'development'; 如果不写,默认是生产环境
css 兼容性处理:postcss —> postcss-loader postcss-preset-env

  1. // 使用loader的默认配置
  2. // 'postcss-loader',
  3. // 修改loader的配置
  4. {
  5. loader: 'postcss-loader',
  6. options: {
  7. ident: 'postcss',
  8. plugins: () => [
  9. // postcss的插件
  10. require('postcss-preset-env')()
  11. ]
  12. }
  13. }

用法

postcss 找到 package.json 中 browserslist 里面的配置,通过配置加载指定的 css 兼容性样式

  1. "browserslist": {
  2. // 开发环境 --> 设置node环境变量:process.env.NODE_ENV = development
  3. "development": [
  4. // 最近一个版本的谷歌,火狐,苹果浏览器
  5. "last 1 chrome version",
  6. "last 1 firefox version",
  7. "last 1 safari version"
  8. ],
  9. // 生产环境:默认是看生产环境
  10. "production": [
  11. ">0.2%",
  12. "not dead",
  13. "not op_mini all"
  14. ]
  15. }

三、压缩 css

导入插件:const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');

  1. plugins: [
  2. new HtmlWebpackPlugin({
  3. template: './src/index.html'
  4. }),
  5. new MiniCssExtractPlugin({
  6. filename: 'css/built.css'
  7. }),
  8. // 压缩css
  9. new OptimizeCssAssetsWebpackPlugin()
  10. ],

四、js 语法检查

  1. // 下一行eslint所有规则都失效(下一行不进行eslint检查)
  2. // eslint-disable-next-line
  3. module: {
  4. rules: [
  5. /*
  6. 语法检查: eslint-loader eslint
  7. 注意:只检查自己写的源代码,第三方的库是不用检查的
  8. 设置检查规则:
  9. package.json中eslintConfig中设置~
  10. "eslintConfig": {
  11. "extends": "airbnb-base"
  12. }
  13. airbnb --> eslint-config-airbnb-base eslint-plugin-import eslint
  14. */
  15. {
  16. test: /\.js$/,
  17. exclude: /node_modules/,
  18. loader: 'eslint-loader',
  19. options: {
  20. // 自动修复eslint的错误
  21. fix: true
  22. }
  23. }
  24. ]
  25. },

五、js 兼容性处理

js 兼容性处理:babel-loader @babel/core
1. 基本 js 兼容性处理 —> @babel/preset-env
问题:只能转换基本语法,如 promise 高级语法不能转换
2. 全部 js 兼容性处理 —> @babel/polyfill
问题:只要解决部分兼容性问题,但是将所有兼容性代码全部引入,体积太大了~
使用方法:import '@babel/polyfill'; 在需要兼容性处理的 js 文件中引入。
3. 需要做兼容性处理的就做:按需加载 —> core-js

  1. module: {
  2. rules: [
  3. {
  4. test: /\.js$/,
  5. exclude: /node_modules/,
  6. loader: 'babel-loader',
  7. options: {
  8. // 预设:指示babel做怎么样的兼容性处理
  9. presets: [
  10. [
  11. '@babel/preset-env',
  12. {
  13. // 按需加载
  14. useBuiltIns: 'usage',
  15. // 指定core-js版本
  16. corejs: {
  17. version: 3
  18. },
  19. // 指定兼容性做到哪个版本浏览器
  20. targets: {
  21. chrome: '60',
  22. firefox: '60',
  23. ie: '9',
  24. safari: '10',
  25. edge: '17'
  26. }
  27. }
  28. ]
  29. ]
  30. }
  31. }
  32. ]
  33. },

六、js 压缩

生产环境下会自动压缩 js 代码
mode: 'production'

七、HTML 压缩

  1. plugins: [
  2. new HtmlWebpackPlugin({
  3. template: './src/index.html',
  4. // 压缩html代码
  5. minify: {
  6. // 移除空格
  7. collapseWhitespace: true,
  8. // 移除注释
  9. removeComments: true
  10. }
  11. })
  12. ],