• webpack5 打包环境抽离分环境基本配置


    • 两种开发模式
      • 开发模式:代码能编译自动化运行
      • 生产模式:代码编译优化输出
    • Webpack 基本功能
      • 开发模式:可以编译 ES Module 语法
      • 生产模式:可以编译 ES Module 语法,压缩 js 代码
    • Webpack 配置文件
    • 5 个核心概念
      • entry
      • output
      • loader
      • plugins
      • mode
    • devServer 配置
      • webpack 直接打包输出
      • webpack serve 启动开发服务器,内存编译打包没有输出

    仓库代码:

    https://gitee.com/zhouyunfang_admin/webpack5-base/tree/webpack-base/icon-default.png?t=M85Bhttps://gitee.com/zhouyunfang_admin/webpack5-base/tree/webpack-base/ 

    生产环境路径D:\myProject\webpack5\webpack5-demo\config\webpack.prod.js

    1. // 生产环境 npx webpack --config ./config/webpack.pro.js
    2. const HtmlWebpackPlugin = require("html-webpack-plugin");
    3. // https://webpack.docschina.org/plugins/mini-css-extract-plugin
    4. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    5. const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
    6. //eslint文档 https://webpack.docschina.org/plugins/eslint-webpack-plugin/
    7. const ESLintPlugin = require("eslint-webpack-plugin");
    8. const path = require("path");
    9. // 获取处理样式的Loaders
    10. const getStyleLoaders = (preProcessor) => {
    11. return [
    12. MiniCssExtractPlugin.loader, //单独生成css文件
    13. "css-loader", //将css资源编译成commonjs的模块到js中
    14. {
    15. loader: "postcss-loader",
    16. options: {
    17. postcssOptions: {
    18. plugins: [
    19. "postcss-preset-env", // 能解决大多数样式兼容性问题
    20. ],
    21. },
    22. },
    23. },
    24. preProcessor,
    25. ].filter(Boolean); //过滤掉preProcessor为undefined值
    26. };
    27. // webpack都是在nodejs平台运行所以要用到node语法
    28. module.exports = {
    29. // 入口 (相对路径)
    30. entry: "./src/main.js",
    31. // 输出
    32. output: {
    33. // 文件输出路径
    34. path: path.resolve(__dirname, "../dist"),
    35. // 入口文件打包输出文件名
    36. filename: "static/js/main.js",
    37. clean: true, //webpack5特性打包前清除上一次打包记录
    38. },
    39. // 加载器
    40. module: {
    41. rules: [
    42. // loader的配置
    43. {
    44. test: /\.css$/, //只检测.css文件
    45. use: getStyleLoaders(),
    46. },
    47. {
    48. test: /\.less$/,
    49. // use与loader的区别,use可以用多个loader;loader只能用一个(loader:'xxxx')
    50. use: getStyleLoaders("less-loader"),
    51. },
    52. {
    53. test: /\.s[ac]ss$/, //a和c结尾的文件都行(sass|scss)
    54. use: getStyleLoaders("sass-loader"),
    55. },
    56. // https://webpack.docschina.org/guides/asset-modules/#resource-assets
    57. {
    58. test: /\.(png|jpe?g|gif|webp|svg)$/, //$匹配结尾,在多行检测中,会匹配一行的结尾
    59. type: "asset", //转base64
    60. parser: {
    61. dataUrlCondition: {
    62. maxSize: 10 * 1024, // 小于10kb的图片转为base64,用于减少请求数据,但体积会大一点点
    63. },
    64. },
    65. generator: {
    66. // 生成输出的图片名字[hash:10]表示只取前10位
    67. // ext:扩展名
    68. // query图片参数
    69. filename: "static/images/[hash:10][ext][query]",
    70. },
    71. },
    72. {
    73. test: /\.(ttf|woff2?|mp3|mp4|avi)$/, //匹配字体图标库或者视频文件
    74. type: "asset/resource", //resource对文件原样的输出
    75. generator: {
    76. //输出media名称
    77. filename: "static/media/[hash:10][ext][query]",
    78. },
    79. },
    80. {
    81. test: /\.js$/,
    82. exclude: /(node_modules)/, //排除node_modules不做js转换处理
    83. use: {
    84. loader: "babel-loader",
    85. // options: {options配置可以写到babel.config.js文件中好维护
    86. // presets: ["@babel/preset-env"],
    87. // },
    88. },
    89. },
    90. ],
    91. },
    92. // 插件
    93. plugins: [
    94. new ESLintPlugin({
    95. //context指定文件根目录,类型为字符串(检查src下的文件)
    96. context: path.resolve(__dirname, "../src"),
    97. }),
    98. /*
    99. https://webpack.docschina.org/plugins/html-webpack-plugin/
    100. 该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle。
    101. */
    102. // new HtmlWebpackPlugin()会将原来的结构覆盖生成一个新的文件
    103. new HtmlWebpackPlugin({
    104. // 以 public/index.html 为模板创建文件
    105. // 新的html文件有两个特点:1. 内容和源文件一致 2. 自动引入打包生成的js等资源
    106. template: path.resolve(__dirname, "../public/index.html"),
    107. }),
    108. // 提取css成单独文件
    109. new MiniCssExtractPlugin({
    110. // 针对css打包后放置指定路径
    111. filename: "static/css/main.css",
    112. }),
    113. // css压缩
    114. new CssMinimizerPlugin(),
    115. ],
    116. // 模式
    117. mode: "production",
    118. };

    开发环境配置路径D:\myProject\webpack5\webpack5-demo\config\webpack.dev.js

    1. // 开发环境 运行模式npx webpack serve --config ./config/webpack.dev.js
    2. const HtmlWebpackPlugin = require("html-webpack-plugin");
    3. const path = require("path");
    4. //eslint文档 https://webpack.docschina.org/plugins/eslint-webpack-plugin/
    5. const ESLintPlugin = require("eslint-webpack-plugin");
    6. // webpack都是在nodejs平台运行所以要用到node语法
    7. module.exports = {
    8. // 入口 (相对路径)
    9. entry: "./src/main.js",
    10. // 输出
    11. output: {
    12. // 文件输出路径(开发模式下没有输出)
    13. path: undefined,
    14. // 入口文件打包输出文件名
    15. filename: "static/js/main.js",
    16. },
    17. // 加载器
    18. module: {
    19. rules: [
    20. // loader的配置
    21. {
    22. test: /\.css$/, //只检测.css文件
    23. use: [
    24. //执行顺序,从右到左(从下到上)
    25. "style-loader", //将js中css通过创建style标签添加到html中动态生效
    26. "css-loader", //将css资源编译成commonjs的模块到js中
    27. ],
    28. },
    29. {
    30. test: /\.less$/,
    31. // use与loader的区别,use可以用多个loader;loader只能用一个(loader:'xxxx')
    32. use: [
    33. // compiles Less to CSS
    34. "style-loader",
    35. "css-loader",
    36. "less-loader",
    37. ],
    38. },
    39. {
    40. test: /\.s[ac]ss$/, //a和c结尾的文件都行(sass|scss)
    41. use: [
    42. // 将 JS 字符串生成为 style 节点
    43. "style-loader",
    44. // 将 CSS 转化成 CommonJS 模块
    45. "css-loader",
    46. // 将 Sass 编译成 CSS
    47. "sass-loader",
    48. ],
    49. },
    50. // https://webpack.docschina.org/guides/asset-modules/#resource-assets
    51. {
    52. test: /\.(png|jpe?g|gif|webp|svg)$/, //$匹配结尾,在多行检测中,会匹配一行的结尾
    53. type: "asset", //转base64
    54. parser: {
    55. dataUrlCondition: {
    56. maxSize: 10 * 1024, // 小于10kb的图片转为base64,用于减少请求数据,但体积会大一点点
    57. },
    58. },
    59. generator: {
    60. // 生成输出的图片名字[hash:10]表示只取前10位
    61. // ext:扩展名
    62. // query图片参数
    63. filename: "static/images/[hash:10][ext][query]",
    64. },
    65. },
    66. {
    67. test: /\.(ttf|woff2?|mp3|mp4|avi)$/, //匹配字体图标库或者视频文件
    68. type: "asset/resource", //resource对文件原样的输出
    69. generator: {
    70. //输出media名称
    71. filename: "static/media/[hash:10][ext][query]",
    72. },
    73. },
    74. {
    75. test: /\.js$/,
    76. exclude: /(node_modules)/, //排除node_modules不做js转换处理
    77. use: {
    78. loader: "babel-loader",
    79. // options: {options配置可以写到babel.config.js文件中好维护
    80. // presets: ["@babel/preset-env"],
    81. // },
    82. },
    83. },
    84. ],
    85. },
    86. // 插件
    87. plugins: [
    88. //plugins的配置
    89. new ESLintPlugin({
    90. //context指定文件根目录,类型为字符串(检查src下的文件)
    91. context: path.resolve(__dirname, "../src"),
    92. }),
    93. /*
    94. https://webpack.docschina.org/plugins/html-webpack-plugin/
    95. 该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle。
    96. */
    97. // new HtmlWebpackPlugin()会将原来的结构覆盖生成一个新的文件
    98. new HtmlWebpackPlugin({
    99. /**
    100. * 模板以public/index.html文件创建新的html文件,
    101. * 新的html文件特点:
    102. * 结构和原来的一致
    103. * 自动引入打包输出的资源
    104. */
    105. template: path.resolve(__dirname, "../public/index.html"),
    106. }),
    107. ],
    108. devServer: {
    109. host: "localhost", // 启动服务器域名
    110. port: "3000", // 启动服务器端口号
    111. open: true, // 是否自动打开浏览器
    112. },
    113. // 模式
    114. mode: "development", //设置为开发 mode: "development |production ",
    115. };

    package.json文件配置启动环境

    1. "scripts": {
    2. "start": "npm run dev",
    3. "dev": "webpack server --config ./config/webpack.dev.js",
    4. "build": "webpack --config ./config/webpack.prod.js"
    5. },

  • 相关阅读:
    数据结构:枚举
    Linux安装jdk
    记录一次内网渗透过程
    循环链表3
    prototype属性与__proto__属性的用法及为什么要用这两个属性
    k8s--基础--23.5--认证-授权-准入控制--通过token令牌登陆dashboard界面
    【DataRoom】- 基于VUE的开源的大屏可视化设计器
    wchar_t* argv[] 数组赋值
    可观测|时序数据降采样在Prometheus实践复盘
    【17. 双链表】
  • 原文地址:https://blog.csdn.net/qq_40190624/article/details/127868727