• 16.webpack4生产环境配置


    1)创建好webpack.config.js文件

    2)配置entry,output配置项

    3)进行loader配置:配置样式文件处理、配置js兼容

    ① 打包样式资源、处理css兼容、生成单独css文件、压缩css

         打包css

         打包less

    涉及的依赖:

            mini-css-extract-plugin:mini-css-extract-plugin中的loader用于将js文件中的css字符串

            css-loader:用于将css文件转成字符串插入js文件中

            postcss-loader:用于处理css兼容问题

            less-loader:用于将less文件转为css文件

            提取成单独文件,在plugins中进行配置mini-css-extract-plugin对象,可以将输出的单独

            文件进行配置输出的css文件路径。并且各个loader引入是有顺序的

            使用optimize-css-assets-webpack-plugin进行压缩

    ② 打包并压缩html资源

    涉及的插件:

            html-webpack-plugin:通过该配置项将打包后的js/css文件引入到指定需要复制的html

            文件中。并通过minify配置项对html文件进行压缩。

    ③打包图片、其它资源

    涉及的依赖:

            file-loader:用于打包输出其它资源文件、作为url-loader使用的前提。

            url-loader:用作打包图片资源,并可以通过配置项对小于指定大小的图片进行base64

            压缩。

            html-loader:处理引入html中引入的图片资源,从而能被url-loader处理。

            

     ④引入eslint-loader统一开发规范(使用推荐的airbnb)

     涉及的依赖:

            eslint:作为使用eslint-loader的前提

            eslint-loader:对eslint进行配置,检查js语法规范

            eslint-config-airbnb-base:推荐使用的eslint代码规范

            eslint-plugin-import:使用的前提条件

    ⑤ 处理js兼容性问题(使用按需加载)、并进行js代码压缩

            babel:使用babel-loader的前提

            babel-loader:做js兼容

            @babel/preset-env:babel的预设,做基本兼容

            core-js:ie浏览器无法兼容es6语法,可以使用core-js进行兼容

            将mode改为production进行js代码压缩

    3. 代码段

    1. const { resolve } = require("path");
    2. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    3. const HtmlWebpackPlugin = require("html-webpack-plugin");
    4. const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin");
    5. const commonCssLoader = [
    6. MiniCssExtractPlugin.loader,
    7. "css-loader",
    8. {
    9. loader: "postcss-loader",
    10. options: {
    11. ident: "postcss",
    12. plugins: () => [require('postcss-preset-env')()]
    13. }
    14. }
    15. ]
    16. module.exports = {
    17. entry: "./src/index.js",
    18. output: {
    19. filename: "js/built.js",
    20. path: resolve(__dirname, "build")
    21. },
    22. module: {
    23. rules: [
    24. {
    25. test: /\.css$/,
    26. use: [...commonCssLoader]
    27. },
    28. {
    29. test: /\.less$/,
    30. use: [...commonCssLoader, "less-loader"]
    31. },
    32. {
    33. test: /\.(jpeg|jpg|png|gif)$/,
    34. loader: 'url-loader',
    35. options: {
    36. limit: 8 * 1024,
    37. name: '[hash:10].[ext]',
    38. esModule: false,
    39. outputPath: 'imgs'
    40. }
    41. },
    42. {
    43. test: /\.html$/
    44. loader: 'html-loader'
    45. },
    46. {
    47. exclude: /\.(html|less|css|js|jpeg|jpg|png|gif)$/,
    48. loader: 'file-loader',
    49. options: {
    50. name: '[hash:10].[ext]',
    51. outputPath: 'media'
    52. }
    53. },
    54. /*
    55. 正常来讲,一个文件只能被一个loader处理。
    56. 当一个文件要被多个loader处理,那么一定要指定loader执行的先后顺序:
    57. 先执行eslint 在执行babel
    58. */
    59. {
    60. // 在package.json中eslintConfig --> airbnb
    61. test: /\.js$/,
    62. exclude: /node_modules/,
    63. // 优先执行
    64. enforce: 'pre',
    65. loader: 'eslint-loader',
    66. options: {
    67. fix: true
    68. }
    69. },
    70. {
    71. test: /\.js$/,
    72. exclude: /node_modules/,
    73. loader: 'babel-loader',
    74. options: {
    75. presets: [
    76. [
    77. "@babel/preset-env",
    78. {
    79. // 按需加载
    80. useBuiltIns: "usage",
    81. // 指定corejs的版本
    82. corejs: {
    83. version: 3
    84. },
    85. // 指定兼容性做到哪个版本浏览器
    86. targets: {
    87. chrome: '60',
    88. firefox: '60',
    89. ie: '9',
    90. safari: '10',
    91. edge: '17'
    92. }
    93. }
    94. ]
    95. ]
    96. }
    97. }
    98. ]
    99. },
    100. plugins: [
    101. new HtmlWebpackPlugin({
    102. template: "./src/index.html",
    103. minify: {
    104. // 移除空格
    105. collapseWhitespace: true,
    106. // 移除注释
    107. removeComments: true
    108. }
    109. }),
    110. new MiniCssExtractPlugin({
    111. filename: "css/built.css"
    112. }),
    113. new OptimizeCssAssetsWebpackPlugin()
    114. ],
    115. mode: "production"
    116. }

  • 相关阅读:
    Mojo 摸脚语言,似乎已经可以安装
    语言的数据结构:树与二叉树(二叉树篇)
    selenium报错:没有打开网页或selenium.common.exceptions.NoSuchDriverException
    智慧校园管理系统,精细化+网格化
    【数据结构】堆的实现
    用javascript绘制点线数据
    Java池化技术
    【计算机基础知识】计算机的概念
    【25-业务开发-基础业务-品牌管理-图片管理-图片上传方式的三种实现方式-第三方公共服务模块集成到项目中-服务端生成签名实战】
    springboot druid多数据源配置,及druid监控
  • 原文地址:https://blog.csdn.net/weixin_43893483/article/details/126568827