阅读 129

webpack js兼容性处理Babel及压缩html和js

Babel简述及作用

Babel是一个JavaScript编辑器,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器(chrome,safire, firefox, IE)或其他环境中。

项目中运用

需要安装的插件

  • babel-loader(必装)
  • @babel/croe(必装)
npm i babel-loader @babel/croe -D
复制代码
  • @babel/preset-env(必装): 基本js兼容性处理, 问题: 只能转换基本语法,如promise高级语法不能转换
npm i @babel/preset-env -D
复制代码
  • @babel/polyfill: 全部js兼容性处理, 问题: 只要解决部分兼容性问题,就将所有兼容性代码全部引入,体积过大
npm i @babel/polyfill -D
复制代码
  • core-js: 需要做兼容性处理就:按需加载
npm i core-js -D
复制代码

用法

根据以上介绍,就采用最优的方法,@babel/preset-env搭配core-js 进行按需加载兼容性代码

webpack.config.js代码配置

const { resolve } = require('path');
const HtmlWebPackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/js/index.js',
  output: {
    filename: 'js/built.js',
    path: resolve(__dirname, 'dist')
  },
  module:{
    rules: [
      /*
        js兼容性处理: babel-loader @babel/core @babel/preset-env
        1.基本js兼容性处理 --> @babel/preset-env
        问题: 只能转换基本语法,如promise高级语法不能转换
        2.全部js兼容性处理 --> @babel/polyfill 直接在js文件中引入即可
        问题: 我只要解决部分兼容性问题,但是将所有兼容性代码全部引入,体积太大了
        3.需要做兼容性处理的就做: 按需加载 -->core-js

        需要第一个和第三个配合时候就可以兼容全部js了
      */
     {
       test: /\.js$/,
       exclude: /node_modules/,
       loader: 'babel-loader',
       options: {
         // 预设:指示babel做怎么样的兼容性处理
         presets: [
           [
              '@babel/preset-env',
              {
                // 按需加载
                useBuiltIns: 'usage',
                corejs:{
                  version: 3
                },
                // 指定兼容性做到哪个版本浏览器
                targets:{
                  chrome: '60',
                  firefox: '60',
                  ie: '9',
                  safari: '10',
                  edge: '17'
                }
              }
           ]
          ]
       }
     }
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: './src/index.html'
    })
  ],
  mode: 'development'
}
复制代码

压缩JS

压缩js只需要把webpack.config.js中的mode改为生产模式即可

mode: 'production
复制代码

压缩html

修改webpack.config.js中plugins中HtmlWebPackPlugin配置

plugins: [
    new HtmlWebPackPlugin({
      template: './src/index.html',
      // 压缩html代码
      minify: {
        // 移除空格
        collapseWhitespace: true,
        // 移除注释
        removeComments: true
      }
    })
  ],
复制代码

demo地址

借鉴视频: B站尚硅谷

文章分类
前端
文章标签