1. const path = require('path')
  2. module.exports = {
  3. // 模式 development production
  4. mode: 'development',
  5. // 入口起点
  6. entry:'./src/index.js',
  7. // 输出
  8. output: {
  9. // 输出路径
  10. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  11. path: path.resolve(__dirname,'dist'),
  12. // 输出文件名
  13. filename: '[name].js'
  14. },
  15. module: {
  16. rules:[
  17. // 详细loader配置【
  18. // 不同文件必须配置不同loader
  19. {
  20. // 匹配哪些文件
  21. test: /\.css$/,
  22. // 使用哪些loader进行处理
  23. use: [
  24. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  25. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  26. 'style-loader',
  27. // 将css文件变成commonjs模块 加载js中,里面的内容是样式字符串
  28. 'css-loader'
  29. ]
  30. },
  31. {
  32. test: /\.less$/,
  33. use: [
  34. 'style-loader',
  35. 'css-loader',
  36. // 将less文件编译成 css文件
  37. 'less-loader'
  38. ]
  39. }
  40. ]
  41. },
  42. plugins: [
  43. // 详细plugins的配置
  44. ]
  45. }

打包html资源

  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const path = require('path')
  6. const HtmlWebpackPlugin = require('html-webpack-plugin')
  7. module.exports = {
  8. // 模式 development production
  9. mode: 'development',
  10. // 入口起点
  11. entry:'./src/index.js',
  12. // 输出
  13. output: {
  14. // 输出路径
  15. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  16. path: path.resolve(__dirname,'dist'),
  17. // 输出文件名
  18. filename: 'built.js'
  19. },
  20. module: {
  21. rules:[
  22. // 详细loader配置
  23. // 不同文件必须配置不同loader
  24. {
  25. // 匹配哪些文件
  26. test: /\.css$/,
  27. // 使用哪些loader进行处理
  28. use: [
  29. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  30. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  31. 'style-loader',
  32. // 将css文件变成commonjs模块 加载js中,里面的内容是样式字符串
  33. 'css-loader'
  34. ]
  35. },
  36. {
  37. test: /\.less$/,
  38. use: [
  39. 'style-loader',
  40. 'css-loader',
  41. // 将less文件编译成 css文件
  42. 'less-loader'
  43. ]
  44. }
  45. ]
  46. },
  47. plugins: [
  48. // 详细plugins的配置
  49. // HtmlWebpackPlugin
  50. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  51. // 需求:需要有结构的HTML文件
  52. new HtmlWebpackPlugin({
  53. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  54. template: './src/index.html'
  55. })
  56. ]
  57. }

打包图片资源

  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const path = require('path')
  6. const HtmlWebpackPlugin = require('html-webpack-plugin')
  7. module.exports = {
  8. // 模式 development production
  9. mode: 'development',
  10. // 入口起点
  11. entry: './src/index.js',
  12. // 输出
  13. output: {
  14. // 输出路径
  15. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  16. path: path.resolve(__dirname, 'dist'),
  17. // 输出文件名
  18. filename: 'built.js'
  19. },
  20. module: {
  21. rules: [
  22. // 详细loader配置
  23. // 不同文件必须配置不同loader
  24. {
  25. // 匹配哪些文件
  26. test: /\.css$/,
  27. // 使用哪些loader进行处理
  28. use: [
  29. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  30. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  31. 'style-loader',
  32. // 将css文件变成commonjs模块 加载js中,里面的内容是样式字符串
  33. 'css-loader'
  34. ]
  35. },
  36. {
  37. test: /\.less$/,
  38. use: [
  39. 'style-loader',
  40. 'css-loader',
  41. // 将less文件编译成 css文件
  42. 'less-loader'
  43. ]
  44. },
  45. {
  46. // 问题: 默认处理不了html中img图片
  47. // 处理图片资源
  48. test: /\.(jpg|png|jpeg|gif)$/,
  49. // 下载url-loader file-loader (url-loader依赖于file-loader)
  50. loader: 'url-loader',
  51. options: {
  52. // 图片大小小于8kb,就会被base64处理,
  53. // 优点:减少请求数量(减轻服务器压力)
  54. // 缺点:图片体积会更大(文件请求速度更慢)
  55. limit: 8 * 1024,
  56. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  57. // 解析时会出问题:[object Module]
  58. // 解决:关闭url-loader的es6模块化,使用commonjs解析
  59. esModule: false,
  60. // 给图片进行重命名
  61. // [hash:10]取图片的hash的前10位
  62. // [ext]取文件原来扩展名
  63. name: '[hash:10].[ext]'
  64. }
  65. },
  66. {
  67. test: /\.html$/,
  68. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  69. loader: 'html-loader'
  70. }
  71. ]
  72. },
  73. plugins: [
  74. // 详细plugins的配置
  75. // HtmlWebpackPlugin
  76. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  77. // 需求:需要有结构的HTML文件
  78. new HtmlWebpackPlugin({
  79. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  80. template: './src/index.html'
  81. })
  82. ]
  83. }

打包字体资源

  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const path = require('path')
  6. const HtmlWebpackPlugin = require('html-webpack-plugin')
  7. module.exports = {
  8. // 模式 development production
  9. mode: 'development',
  10. // 入口起点
  11. entry: './src/index.js',
  12. // 输出
  13. output: {
  14. // 输出路径
  15. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  16. path: path.resolve(__dirname, 'dist'),
  17. // 输出文件名
  18. filename: 'built.js'
  19. },
  20. module: {
  21. rules: [
  22. // 详细loader配置
  23. // 不同文件必须配置不同loader
  24. {
  25. // 匹配哪些文件
  26. test: /\.css$/,
  27. // 使用哪些loader进行处理
  28. use: [
  29. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  30. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  31. 'style-loader',
  32. // 将css文件变成commonjs模块 加载js中,里面的内容是样式字符串
  33. 'css-loader'
  34. ]
  35. },
  36. {
  37. test: /\.less$/,
  38. use: [
  39. 'style-loader',
  40. 'css-loader',
  41. // 将less文件编译成 css文件
  42. 'less-loader'
  43. ]
  44. },
  45. {
  46. // 问题: 默认处理不了html中img图片
  47. // 处理图片资源
  48. test: /\.(jpg|png|jpeg|gif)$/,
  49. // 下载url-loader file-loader (url-loader依赖于file-loader)
  50. loader: 'url-loader',
  51. options: {
  52. // 图片大小小于8kb,就会被base64处理,
  53. // 优点:减少请求数量(减轻服务器压力)
  54. // 缺点:图片体积会更大(文件请求速度更慢)
  55. limit: 8 * 1024,
  56. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  57. // 解析时会出问题:[object Module]
  58. // 解决:关闭url-loader的es6模块化,使用commonjs解析
  59. esModule: false,
  60. // 给图片进行重命名
  61. // [hash:10]取图片的hash的前10位
  62. // [ext]取文件原来扩展名
  63. name: '[hash:10].[ext]'
  64. }
  65. },
  66. {
  67. test: /\.html$/,
  68. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  69. loader: 'html-loader'
  70. },
  71. // 打包其他资源
  72. {
  73. // 排除css/js/html资源
  74. exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
  75. loader: 'file-loader',
  76. options: {
  77. name: '[hash:10].[ext]'
  78. }
  79. }
  80. ]
  81. },
  82. plugins: [
  83. // 详细plugins的配置
  84. // HtmlWebpackPlugin
  85. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  86. // 需求:需要有结构的HTML文件
  87. new HtmlWebpackPlugin({
  88. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  89. template: './src/index.html'
  90. })
  91. ]
  92. }

devServer

  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const path = require('path')
  6. const HtmlWebpackPlugin = require('html-webpack-plugin')
  7. const { resolve } = require('path')
  8. module.exports = {
  9. // 模式 development production
  10. mode: 'development',
  11. // 入口起点
  12. entry: './src/index.js',
  13. // 输出
  14. output: {
  15. // 输出路径
  16. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  17. path: path.resolve(__dirname, 'dist'),
  18. // 输出文件名
  19. filename: 'built.js'
  20. },
  21. module: {
  22. rules: [
  23. // 详细loader配置
  24. // 不同文件必须配置不同loader
  25. {
  26. // 匹配哪些文件
  27. test: /\.css$/,
  28. // 使用哪些loader进行处理
  29. use: [
  30. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  31. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  32. 'style-loader',
  33. // 将css文件变成commonjs模块 加载js中,里面的内容是样式字符串
  34. 'css-loader'
  35. ]
  36. },
  37. {
  38. test: /\.less$/,
  39. use: [
  40. 'style-loader',
  41. 'css-loader',
  42. // 将less文件编译成 css文件
  43. 'less-loader'
  44. ]
  45. },
  46. {
  47. // 问题: 默认处理不了html中img图片
  48. // 处理图片资源
  49. test: /\.(jpg|png|jpeg|gif)$/,
  50. // 下载url-loader file-loader (url-loader依赖于file-loader)
  51. loader: 'url-loader',
  52. options: {
  53. // 图片大小小于8kb,就会被base64处理,
  54. // 优点:减少请求数量(减轻服务器压力)
  55. // 缺点:图片体积会更大(文件请求速度更慢)
  56. limit: 8 * 1024,
  57. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  58. // 解析时会出问题:[object Module]
  59. // 解决:关闭url-loader的es6模块化,使用commonjs解析
  60. esModule: false,
  61. // 给图片进行重命名
  62. // [hash:10]取图片的hash的前10位
  63. // [ext]取文件原来扩展名
  64. name: '[hash:10].[ext]'
  65. }
  66. },
  67. {
  68. test: /\.html$/,
  69. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  70. loader: 'html-loader'
  71. },
  72. // 打包其他资源
  73. {
  74. // 排除css/js/html资源
  75. exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
  76. loader: 'file-loader',
  77. options: {
  78. name: '[hash:10].[ext]'
  79. }
  80. }
  81. ]
  82. },
  83. plugins: [
  84. // 详细plugins的配置
  85. // HtmlWebpackPlugin
  86. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  87. // 需求:需要有结构的HTML文件
  88. new HtmlWebpackPlugin({
  89. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  90. template: './src/index.html'
  91. })
  92. ],
  93. // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新)
  94. // 特点:只会在内存中编译打包,不会有任何输出
  95. // 启动devServer指令为:npx webpack-dev-server
  96. devServer: {
  97. // 项目构建后的路径
  98. contentBase: resolve(__dirname,'build'),
  99. // 启动gzip压缩
  100. compress: true,
  101. // 端口号
  102. port: 3000,
  103. // 自动打开浏览器
  104. open: true
  105. }
  106. }

开发环境配置

  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const path = require('path')
  6. const HtmlWebpackPlugin = require('html-webpack-plugin')
  7. const { resolve } = require('path')
  8. module.exports = {
  9. // 模式 development production
  10. mode: 'development',
  11. // 入口起点
  12. entry: './src/js/index.js',
  13. // 输出
  14. output: {
  15. // 输出路径
  16. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  17. path: path.resolve(__dirname, 'dist'),
  18. // 输出文件名
  19. filename: 'js/built.js'
  20. },
  21. module: {
  22. rules: [
  23. // 详细loader配置
  24. // 不同文件必须配置不同loader
  25. {
  26. // 匹配哪些文件
  27. test: /\.css$/,
  28. // 使用哪些loader进行处理
  29. use: [
  30. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  31. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  32. 'style-loader',
  33. // 将css文件变成commonjs模块 加载js中,里面的内容是样式字符串
  34. 'css-loader'
  35. ]
  36. },
  37. {
  38. test: /\.less$/,
  39. use: [
  40. 'style-loader',
  41. 'css-loader',
  42. // 将less文件编译成 css文件
  43. 'less-loader'
  44. ]
  45. },
  46. {
  47. // 问题: 默认处理不了html中img图片
  48. // 处理图片资源
  49. test: /\.(jpg|png|jpeg|gif)$/,
  50. // 下载url-loader file-loader (url-loader依赖于file-loader)
  51. loader: 'url-loader',
  52. options: {
  53. // 图片大小小于8kb,就会被base64处理,
  54. // 优点:减少请求数量(减轻服务器压力)
  55. // 缺点:图片体积会更大(文件请求速度更慢)
  56. limit: 8 * 1024,
  57. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  58. // 解析时会出问题:[object Module]
  59. // 解决:关闭url-loader的es6模块化,使用commonjs解析
  60. esModule: false,
  61. // 给图片进行重命名
  62. // [hash:10]取图片的hash的前10位
  63. // [ext]取文件原来扩展名
  64. name: '[hash:10].[ext]',
  65. outputPath: 'imgs'
  66. }
  67. },
  68. {
  69. test: /\.html$/,
  70. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  71. loader: 'html-loader'
  72. },
  73. // 打包其他资源
  74. {
  75. // 排除css/js/html资源
  76. exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
  77. loader: 'file-loader',
  78. options: {
  79. name: '[hash:10].[ext]',
  80. outputPath: 'media'
  81. }
  82. }
  83. ]
  84. },
  85. plugins: [
  86. // 详细plugins的配置
  87. // HtmlWebpackPlugin
  88. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  89. // 需求:需要有结构的HTML文件
  90. new HtmlWebpackPlugin({
  91. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  92. template: './src/index.html'
  93. })
  94. ],
  95. // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新)
  96. // 特点:只会在内存中编译打包,不会有任何输出
  97. // 启动devServer指令为:npx webpack-dev-server
  98. devServer: {
  99. // 项目构建后的路径
  100. contentBase: resolve(__dirname,'build'),
  101. // 启动gzip压缩
  102. compress: true,
  103. // 端口号
  104. port: 3000,
  105. // 自动打开浏览器
  106. open: true
  107. }
  108. }

打包后的文件image.png

构建环境

image.png
开发模式一般追求快
生产模式需要做一些优化:代码压缩、兼容性处理、稳定性…

提取css成单独文件

需要下载 min-css-extract-plugin

  1. npm i min-css-extract-plugin -D

这里要设置publicPath,不然 css 的背景图片无法显示

  1. module: {
  2. rules: [
  3. // 详细loader配置
  4. // 不同文件必须配置不同loader
  5. {
  6. // 匹配哪些文件
  7. test: /\.(css|less)$/,
  8. // 使用哪些loader进行处理
  9. use: [
  10. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  11. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  12. // 'style-loader',
  13. // 这个loader取代style-loader 作用:提取js中的css成单独文件
  14. {
  15. loader: MiniCssExtractPlugin.loader,
  16. options: {
  17. // 设置背景图片的路径
  18. publicPath: '../'
  19. }
  20. },
  21. // css文件整合到js文件中
  22. 'css-loader',
  23. 'less-loader',
  24. ],
  25. }
  26. ]
  27. }
  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const HtmlWebpackPlugin = require('html-webpack-plugin')
  6. const { resolve } = require('path')
  7. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  8. module.exports = {
  9. // 模式 development production
  10. mode: 'development',
  11. // 入口起点
  12. entry: './src/js/index.js',
  13. // 输出
  14. output: {
  15. // 输出路径
  16. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  17. path: resolve(__dirname, 'dist'),
  18. // 输出文件名
  19. filename: 'js/built.js',
  20. },
  21. module: {
  22. rules: [
  23. // 详细loader配置
  24. // 不同文件必须配置不同loader
  25. {
  26. // 匹配哪些文件
  27. test: /\.(css|less)$/,
  28. // 使用哪些loader进行处理
  29. use: [
  30. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  31. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  32. // 'style-loader',
  33. // 这个loader取代style-loader 作用:提取js中的css成单独文件
  34. {
  35. loader: MiniCssExtractPlugin.loader,
  36. options: {
  37. // 设置背景图片的路径
  38. publicPath: '../'
  39. }
  40. },
  41. // css文件整合到js文件中
  42. 'css-loader',
  43. 'less-loader',
  44. ],
  45. },
  46. {
  47. // 问题: 默认处理不了htmlimg图片
  48. // 处理图片资源
  49. test: /\.(jpg|png|jpeg|gif)$/,
  50. // 下载url-loader file-loader (url-loader依赖于file-loader)
  51. loader: 'url-loader',
  52. options: {
  53. // 图片大小小于8kb,就会被base64处理,
  54. // 优点:减少请求数量(减轻服务器压力)
  55. // 缺点:图片体积会更大(文件请求速度更慢)
  56. limit: 8 * 1024,
  57. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  58. // 解析时会出问题:[object Module]
  59. // 解决:关闭url-loaderes6模块化,使用commonjs解析
  60. esModule: false,
  61. // 给图片进行重命名
  62. // [hash:10]取图片的hash的前10
  63. // [ext]取文件原来扩展名
  64. name: '[hash:10].[ext]',
  65. outputPath: 'imgs'
  66. }
  67. },
  68. {
  69. test: /\.html$/,
  70. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  71. loader: 'html-loader'
  72. },
  73. // 打包其他资源
  74. {
  75. // 排除css/js/html资源
  76. exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
  77. loader: 'file-loader',
  78. options: {
  79. name: '[hash:10].[ext]',
  80. outputPath: 'media'
  81. }
  82. }
  83. ]
  84. },
  85. plugins: [
  86. // 详细plugins的配置
  87. // HtmlWebpackPlugin
  88. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  89. // 需求:需要有结构的HTML文件
  90. new HtmlWebpackPlugin({
  91. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  92. template: './src/index.html'
  93. }),
  94. new MiniCssExtractPlugin({
  95. // 对输出的css文件进行重命名
  96. filename: 'css/built.css'
  97. })
  98. ],
  99. // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新)
  100. // 特点:只会在内存中编译打包,不会有任何输出
  101. // 启动devServer指令为:npx webpack-dev-server
  102. devServer: {
  103. // 项目构建后的路径
  104. contentBase: resolve(__dirname, 'build'),
  105. // 启动gzip压缩
  106. compress: true,
  107. // 端口号
  108. port: 3000,
  109. // 自动打开浏览器
  110. open: true
  111. }
  112. }

css兼容性处理

css浏览器兼容性处理:
postcss —> postcss-loader postcss-preset-env
帮postcss找到package.json中 browserslist 里面的配置,通过配置加载指定的css兼容性样式

  1. npm i postcss-loader@3.0.0 postcss-preset-env@6.7.0 -D

package.json中 的配置

  1. "browserslist": {
  2. "development":[
  3. # 最近一版的chorme
  4. "last 1 chrome version",
  5. "last 1 firefox version",
  6. "last 1 safari version"
  7. ],
  8. "production":[
  9. # 99.8% 的浏览器 没有死掉的 没有欧朋
  10. ">0.2%",
  11. "not dead",
  12. "not op_mini all"
  13. ]
  14. }
  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const HtmlWebpackPlugin = require('html-webpack-plugin')
  6. const { resolve } = require('path')
  7. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  8. // 设置nodejs环境变量
  9. // process.env.NODE_ENV = 'development'
  10. module.exports = {
  11. // 模式 development production
  12. mode: 'development',
  13. // 入口起点
  14. entry: './src/js/index.js',
  15. // 输出
  16. output: {
  17. // 输出路径
  18. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  19. path: resolve(__dirname, 'dist'),
  20. // 输出文件名
  21. filename: 'js/built.js'
  22. },
  23. module: {
  24. rules: [
  25. // 详细loader配置
  26. // 不同文件必须配置不同loader
  27. {
  28. // 匹配哪些文件
  29. test: /\.(css|less)$/,
  30. // 使用哪些loader进行处理
  31. use: [
  32. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  33. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  34. // 'style-loader',
  35. // 这个loader取代style-loader 作用:提取js中的css成单独文件
  36. {
  37. loader: MiniCssExtractPlugin.loader,
  38. options: {
  39. // 设置背景图片的路径
  40. publicPath: '../'
  41. }
  42. },
  43. // css文件整合到js文件中
  44. 'css-loader',
  45. 'less-loader',
  46. /*
  47. css兼容性处理:
  48. postcss --> postcss-loader postcss-preset-env
  49. postcss找到package.json browserslist 里面的配置,通过配置加载指定的css兼容性样式
  50. "browserslist": {
  51. 开发环境:需要设置环境变量 process.env.NODE_ENV = development
  52. "development":[
  53. "last 1 chrome version",
  54. "last 1 firefox version",
  55. "last 1 safari version"
  56. ],
  57. 生产环境:默认就是生产环境
  58. "production":[
  59. ">0.2%",
  60. "not dead",
  61. "not op_mini all"
  62. ]
  63. }
  64. */
  65. {
  66. loader: 'postcss-loader',
  67. options: {
  68. ident: 'postcss',
  69. plugins: () => {
  70. // postcss的插件
  71. require('postcss-preset-env')()
  72. }
  73. }
  74. }
  75. // 使用loader的默认配置
  76. // 'postcss-loader',
  77. // 修改loader的配置
  78. ]
  79. },
  80. {
  81. // 问题: 默认处理不了htmlimg图片
  82. // 处理图片资源
  83. test: /\.(jpg|png|jpeg|gif)$/,
  84. // 下载url-loader file-loader (url-loader依赖于file-loader)
  85. loader: 'url-loader',
  86. options: {
  87. // 图片大小小于8kb,就会被base64处理,
  88. // 优点:减少请求数量(减轻服务器压力)
  89. // 缺点:图片体积会更大(文件请求速度更慢)
  90. limit: 8 * 1024,
  91. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  92. // 解析时会出问题:[object Module]
  93. // 解决:关闭url-loaderes6模块化,使用commonjs解析
  94. esModule: false,
  95. // 给图片进行重命名
  96. // [hash:10]取图片的hash的前10
  97. // [ext]取文件原来扩展名
  98. name: '[hash:10].[ext]',
  99. outputPath: 'imgs'
  100. }
  101. },
  102. {
  103. test: /\.html$/,
  104. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  105. loader: 'html-loader'
  106. },
  107. // 打包其他资源
  108. {
  109. // 排除css/js/html资源
  110. exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
  111. loader: 'file-loader',
  112. options: {
  113. name: '[hash:10].[ext]',
  114. outputPath: 'media'
  115. }
  116. }
  117. ]
  118. },
  119. plugins: [
  120. // 详细plugins的配置
  121. // HtmlWebpackPlugin
  122. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  123. // 需求:需要有结构的HTML文件
  124. new HtmlWebpackPlugin({
  125. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  126. template: './src/index.html'
  127. }),
  128. new MiniCssExtractPlugin({
  129. // 对输出的css文件进行重命名
  130. filename: 'css/built.css'
  131. })
  132. ],
  133. // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新)
  134. // 特点:只会在内存中编译打包,不会有任何输出
  135. // 启动devServer指令为:npx webpack-dev-server
  136. devServer: {
  137. // 项目构建后的路径
  138. contentBase: resolve(__dirname, 'build'),
  139. // 启动gzip压缩
  140. compress: true,
  141. // 端口号
  142. port: 3000,
  143. // 自动打开浏览器
  144. open: true
  145. }
  146. }

更多浏览器的配置可以在 github 搜索 browserslist

压缩css

需要下载插件 optimize-css-assets-webpack-plugin

  1. /*
  2. loader: 1.下载 2.使用
  3. plugins: 1.下载 2.引用 3.使用
  4. */
  5. const HtmlWebpackPlugin = require('html-webpack-plugin')
  6. const { resolve } = require('path')
  7. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  8. const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
  9. // 设置nodejs环境变量
  10. // process.env.NODE_ENV = 'development'
  11. module.exports = {
  12. // 模式 development production
  13. mode: 'development',
  14. // 入口起点
  15. entry: './src/js/index.js',
  16. // 输出
  17. output: {
  18. // 输出路径
  19. // __dirname nodejs的变量, 代表当前文件的目录绝对路径
  20. path: resolve(__dirname, 'dist'),
  21. // 输出文件名
  22. filename: 'js/built.js'
  23. },
  24. module: {
  25. rules: [
  26. // 详细loader配置
  27. // 不同文件必须配置不同loader
  28. {
  29. // 匹配哪些文件
  30. test: /\.(css|less)$/,
  31. // 使用哪些loader进行处理
  32. use: [
  33. // use数组中loader执行顺序:从右到左,从下到上 依次执行
  34. // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
  35. // 'style-loader',
  36. // 这个loader取代style-loader 作用:提取js中的css成单独文件
  37. {
  38. loader: MiniCssExtractPlugin.loader,
  39. options: {
  40. // 设置背景图片的路径
  41. publicPath: '../'
  42. }
  43. },
  44. // css文件整合到js文件中
  45. 'css-loader',
  46. 'less-loader',
  47. /*
  48. css兼容性处理:
  49. postcss --> postcss-loader postcss-preset-env
  50. postcss找到package.json browserslist 里面的配置,通过配置加载指定的css兼容性样式
  51. "browserslist": {
  52. 开发环境:需要设置环境变量 process.env.NODE_ENV = development
  53. "development":[
  54. "last 1 chrome version",
  55. "last 1 firefox version",
  56. "last 1 safari version"
  57. ],
  58. 生产环境:默认就是生产环境
  59. "production":[
  60. ">0.2%",
  61. "not dead",
  62. "not op_mini all"
  63. ]
  64. }
  65. */
  66. {
  67. loader: 'postcss-loader',
  68. options: {
  69. ident: 'postcss',
  70. plugins: () => {
  71. // postcss的插件
  72. require('postcss-preset-env')()
  73. }
  74. }
  75. }
  76. // 使用loader的默认配置
  77. // 'postcss-loader',
  78. // 修改loader的配置
  79. ]
  80. },
  81. {
  82. // 问题: 默认处理不了htmlimg图片
  83. // 处理图片资源
  84. test: /\.(jpg|png|jpeg|gif)$/,
  85. // 下载url-loader file-loader (url-loader依赖于file-loader)
  86. loader: 'url-loader',
  87. options: {
  88. // 图片大小小于8kb,就会被base64处理,
  89. // 优点:减少请求数量(减轻服务器压力)
  90. // 缺点:图片体积会更大(文件请求速度更慢)
  91. limit: 8 * 1024,
  92. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
  93. // 解析时会出问题:[object Module]
  94. // 解决:关闭url-loaderes6模块化,使用commonjs解析
  95. esModule: false,
  96. // 给图片进行重命名
  97. // [hash:10]取图片的hash的前10
  98. // [ext]取文件原来扩展名
  99. name: '[hash:10].[ext]',
  100. outputPath: 'imgs'
  101. }
  102. },
  103. {
  104. test: /\.html$/,
  105. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  106. loader: 'html-loader'
  107. },
  108. // 打包其他资源
  109. {
  110. // 排除css/js/html资源
  111. exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
  112. loader: 'file-loader',
  113. options: {
  114. name: '[hash:10].[ext]',
  115. outputPath: 'media'
  116. }
  117. }
  118. ]
  119. },
  120. plugins: [
  121. // 详细plugins的配置
  122. // HtmlWebpackPlugin
  123. // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
  124. // 需求:需要有结构的HTML文件
  125. new HtmlWebpackPlugin({
  126. // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
  127. template: './src/index.html'
  128. }),
  129. new MiniCssExtractPlugin({
  130. // 对输出的css文件进行重命名
  131. filename: 'css/built.css'
  132. }),
  133. // 压缩css
  134. new OptimizeCssAssetsWebpackPlugin()
  135. ],
  136. // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新)
  137. // 特点:只会在内存中编译打包,不会有任何输出
  138. // 启动devServer指令为:npx webpack-dev-server
  139. devServer: {
  140. // 项目构建后的路径
  141. contentBase: resolve(__dirname, 'build'),
  142. // 启动gzip压缩
  143. compress: true,
  144. // 端口号
  145. port: 3000,
  146. // 自动打开浏览器
  147. open: true
  148. }
  149. }

语法检查

arbnb可以去github搜一下

/* 
    loader: 1.下载 2.使用
    plugins: 1.下载  2.引用  3.使用
*/
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { resolve } = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

// 设置nodejs环境变量
// process.env.NODE_ENV = 'development'

module.exports = {
  // 模式 development production
  mode: 'development',
  // 入口起点
  entry: './src/js/index.js',
  // 输出
  output: {
    // 输出路径
    // __dirname nodejs的变量, 代表当前文件的目录绝对路径
    path: resolve(__dirname, 'dist'),
    // 输出文件名
    filename: 'js/built.js'
  },
  module: {
    rules: [
      // 详细loader配置
      // 不同文件必须配置不同loader
      {
        // 匹配哪些文件
        test: /\.(css|less)$/,
        // 使用哪些loader进行处理
        use: [
          // use数组中loader执行顺序:从右到左,从下到上 依次执行
          // 创建style 标签,将js中的样式资源进行插入,添加到head中生效
          // 'style-loader',
          // 这个loader取代style-loader 作用:提取js中的css成单独文件
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              // 设置背景图片的路径
              publicPath: '../'
            }
          },
          // 将css文件整合到js文件中
          'css-loader',
          'less-loader',
          /*
            css兼容性处理:
            postcss --> postcss-loader postcss-preset-env
            帮postcss找到package.json中 browserslist 里面的配置,通过配置加载指定的css兼容性样式
            "browserslist": {
              开发环境:需要设置环境变量 process.env.NODE_ENV = development
              "development":[
                "last 1 chrome version",
                "last 1 firefox version",
                "last 1 safari version"
              ],
              生产环境:默认就是生产环境
              "production":[
                ">0.2%",
                "not dead",
                "not op_mini all"
              ]
            }
            */
           {
             loader: 'postcss-loader',
             options: {
               ident: 'postcss',
               plugins: () => {
                 // postcss的插件
                 require('postcss-preset-env')()
               }
             }
           }
          // 使用loader的默认配置
          // 'postcss-loader',
          // 修改loader的配置
        ]
      },
      {
        // 问题: 默认处理不了html中img图片
        // 处理图片资源
        test: /\.(jpg|png|jpeg|gif)$/,
        // 下载url-loader file-loader (url-loader依赖于file-loader)
        loader: 'url-loader',
        options: {
          // 图片大小小于8kb,就会被base64处理,
          // 优点:减少请求数量(减轻服务器压力)
          // 缺点:图片体积会更大(文件请求速度更慢)
          limit: 8 * 1024,
          // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入是commonjs
          // 解析时会出问题:[object Module]
          // 解决:关闭url-loader的es6模块化,使用commonjs解析
          esModule: false,
          // 给图片进行重命名
          // [hash:10]取图片的hash的前10位
          // [ext]取文件原来扩展名
          name: '[hash:10].[ext]',
          outputPath: 'imgs'
        }
      },
      {
        test: /\.html$/,
        // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
        loader: 'html-loader'
      },
      // 打包其他资源
      {
        // 排除css/js/html资源
        exclude: /\.(css|js|html|less|jpg|png|jpeg|gif)/,
        loader: 'file-loader',
        options: {
          name: '[hash:10].[ext]',
          outputPath: 'media'
        }
      },
      /* 
        语法检查:eslint-loader eslint
        注意: 只检查自己写的源代码,第三方库是不用检查的
        设置检查规则:
        package.json中eslintConfig中设置
        "eslintConfig": {
            "extends": "airbnb-base"
        }
        airbnb --> eslint-config-airbnb-base eslint-plugin-import eslint
      */
    //   {
    //       test: /\.js$/,
    //       exclude: /node_modules/,
    //       loader: 'eslint-loader',
    //       options: {
    //           fix
    //       }
    //   }
    ]
  },
  plugins: [
    // 详细plugins的配置
    // HtmlWebpackPlugin
    // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
    // 需求:需要有结构的HTML文件
    new HtmlWebpackPlugin({
      // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
      template: './src/index.html'
    }),
    new MiniCssExtractPlugin({
      // 对输出的css文件进行重命名
      filename: 'css/built.css'
    }),
    // 压缩css
    new OptimizeCssAssetsWebpackPlugin()
  ],

  // 开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新)
  // 特点:只会在内存中编译打包,不会有任何输出
  // 启动devServer指令为:npx webpack-dev-server
  devServer: {
    // 项目构建后的路径
    contentBase: resolve(__dirname, 'build'),
    // 启动gzip压缩
    compress: true,
    // 端口号
    port: 3000,
    // 自动打开浏览器
    open: true
  }
}

package.jsoo中

"eslintConfig": {
    "extends": "airbnb-base"
  }

js兼容性处理

安装 babel-loader@8.0.6 @babel/preset-env@7.8.4