webpack生产环境下的配置

css 处理

css提取

  1. 下载包

npm i -D mini-css-extract-plugin

  1. 配置
 module: {
   rules: [
     {
       test: /\.css$/,
       use: [
         // 'style-loader', // 创建style标签,将样式加入js文件
         MiniCssExtractPlugin.loader, // 提取js中的css成单独的文件
         'css-loader',
       ]
     }, 
   ]
 },
 plugins: [
   new HtmlWebpackPlugin({
     template: './src/index.html'
   }),
   new MiniCssExtractPlugin({
     filename: 'css/budle.css'
   })
 ],

css兼容性处理

  1. 下载包

npm i -D postcss-loader postcss-preset-env

  1. 配置

Webpack.config.js

 rules: [
   {
     test: /\.css$/,
     use: [
       // 'style-loader', // 创建style标签,将样式加入js文件
       MiniCssExtractPlugin.loader, // 提取js中的css成单独的文件
       'css-loader',
       // css兼容性处理:postcss ---> postcss-loader  postcss-preset-env
       // 帮postcss找到package.json中的browerslist里面的配置,通过配置加载指定的css兼容性样式
       /**
                 * "browserslist": {
                 *   // 开发环境 --> 设置node环境变量: process.env.NODE_ENV = development 才能生效
                    "development": [
                    "last 1 chrome version",
                    "last 2 firefox version",
                    "last 1 safari version"
                    ],
                    // 生产环境:默认看生产环境
                    "production":[
                    "> 0.2%",
                    "not dead",
                    "not op_mini all"
                    ]
                }
                 */
       {
         loader: 'postcss-loader',
         options: {
           postcssOptions: {
             plugins:  [
               'postcss-preset-env'
             ]
           },
         }
       }
     ]
   }, 
 ]

package.json

 "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 2 firefox version",
      "last 1 safari version"
    ],
    "production": [
      "> 0.1%",
      "not dead",
      "not op_mini all"
    ]
  }

压缩css

  1. 下载包

npm i css-minimizer-webpack-plugin -D

 plugins: [
  // 压缩css
  new CssMinimizerWebpackPlugin()
],

js压缩

  1. mode设置为生产模式即可,生产环境自动压缩js

mode: "production"

html压缩

plugins: [
  new HtmlWebpackPlugin({
    template: './src/index.html',
    minify: {
      // 移除空格
      collapseWhitespace: true,
      // 移除注释
      removeComments: true,
    }
  }),
]

eslint

  1. 下载包

npm i -D eslint eslint-webpack-plugin eslint-plugin-import eslint-config-airbnb-base

  1. 配置

Webpack.config.js

 plugins: [
   new ESLintWebpackPlugin({
     exclude: '/node_modules/',
     fix: true,
   })
 ],

Package.json
根配置,配置eslint标准

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

js兼容

  1. 下载包

npm i -D babel-loader @babel/preset-env @babel/core @babel/polyfill core-js

  1. 配置
module: {
  rules: [
     {
       //  1. js兼容性处理: babel-loader @babel/core  @babel/preset-env
       //  问题:babel只能转换基础的语法,如promise则不能进行转换
       //  2. 全部兼容  @babel/polyfill
       //  问题:可以解决兼容性问题,但是引入了所有的兼容性代码,体积太大
       //  3. 需要做兼容性的处理就ok,按需加载---> core-js
       test: /\.js$/,
       exclude: /node_modules/,
       loader: 'babel-loader',
       options: {
         // 预设: 指示babel做怎样的兼容性处理
         presets: [[
           '@babel/preset-env',
           {
             useBuiltIns: 'usage', //按需加载
             corejs: {
               version: 3, // 指定core-js版本
             },
             targets: {  // 指定兼容浏览器版本
               chrome: '60',
               firefox: '60',
               ie: '9',
               safari: '10',
               edge: '17'
             }
           }
         ]]
       }
     }
  ]
}

在入口文件(src/index.js)引入@babel/polyfill

import '@babel/polyfill';

方案2和方案三选一种即可
方案2

module: {
  rules: [
      {
       test: /\.js$/,
       exclude: /node_modules/,
       loader: 'babel-loader',
       options: {
         // 预设: 指示babel做怎样的兼容性处理
         presets: [[
           '@babel/preset-env',
         ]]
       }
     }
  ]
}

在入口文件引入 @babel/polyfill

import '@babel/polyfill';

方案3

module: {
  rules: [
     {
       //  1. js兼容性处理: babel-loader @babel/core  @babel/preset-env
       //  问题:babel只能转换基础的语法,如promise则不能进行转换
       //  2. 全部兼容  @babel/polyfill
       //  问题:可以解决兼容性问题,但是引入了所有的兼容性代码,体积太大
       //  3. 需要做兼容性的处理就ok,按需加载---> core-js
       test: /\.js$/,
       exclude: /node_modules/,
       loader: 'babel-loader',
       options: {
         // 预设: 指示babel做怎样的兼容性处理
         presets: [[
           '@babel/preset-env',
           {
             useBuiltIns: 'usage', //按需加载
             corejs: {
               version: 3, // 指定core-js版本
             },
             targets: {  // 指定兼容浏览器版本
               chrome: '60',
               firefox: '60',
               ie: '9',
               safari: '10',
               edge: '17'
             }
           }
         ]]
       }
     }
  ]
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webpack生产环境和测试环境之间的主要区别在于它们的配置和优化。以下是一些常见的差异: 1. 打包目标:在生产环境中,通常会将代码最小化、压缩和优化,以便在部署到生产服务器时获得更好的性能。而在测试环境中,通常更关注代码的可读性和调试能力。 2. 调试工具:在测试环境中,可以启用更多的调试工具和开发者工具,以便更容易地进行代码调试和错误追踪。而在生产环境中,这些工具通常会被禁用或仅限于特定的情况下使用。 3. 资源路径:在测试环境中,通常会使用相对路径或本地路径来引用资源文件,方便本地开发和测试。而在生产环境中,为了适应部署到不同的服务器和域名下,需要使用绝对路径或基于公共路径的方式引用资源。 4. 环境变量:在测试环境中,可以使用不同的环境变量来模拟各种情况,以确保代码在各种场景下都能正常工作。而在生产环境中,需要使用真实的环境变量来配置和控制应用程序的行为。 5. 缓存和版本控制:在生产环境中,通常会通过添加哈希值或版本号来实现缓存和版本控制,以便在更新应用程序时能够正确地加载最新的资源文件。而在测试环境中,可以禁用缓存,以方便进行代码的频繁修改和测试。 总的来说,生产环境和测试环境的主要区别在于性能优化、调试能力、资源路径、环境变量和缓存等方面的配置和处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值