zoukankan      html  css  js  c++  java
  • webpack 之(11) js 语法检查,兼容处理,压缩html和js

    语法检查

       1/需要在pageage.json中配置eslintConfig

       2/需要执行一下命令:

       npm i eslint-loader  eslint  eslint-config-airbnb-base  eslint-plugin-import

      3/   // eslint-disable-next-line        包含//内容的这一句,表示下一行eslint所有规则都失效 

    "dependencies": {
        "css-loader": "^5.2.4",
        "eslint": "^7.25.0",
        "eslint-config-airbnb-base": "^14.2.1",
        "eslint-loader": "^4.0.2",
        "eslint-plugin-import": "^2.22.1",
        "file-loader": "^6.2.0",
        "html-webpack-plugin": "^5.3.1",
        "mini-css-extract-plugin": "^1.5.0",
        "optimize-css-assets-webpack-plugin": "^5.0.4",
        "postcss-loader": "^5.2.0",
        "postcss-preset-env": "^6.7.0",
        "style-loader": "^2.0.0",
        "url-loader": "^4.1.1"
      },
    //继承airbnb的规范
    "eslintConfig": {
        "extends":"airbnb-base"
      }
    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, 'build'),
      },
      module: {
        rules: [
          /* 语法检查:eslint-loader eslint
            注意:只检查自己写的源代码,第三方的库不用检查的
            设置检查规则
              package.json 中 eslintConfig中设置
              airbnb 风格指南 需要三个库
                 --eslint-config-airbnb-base
                 --eslint
                 --eslint-plugin-import
            package.json配置
            "eslintConfig": {
                "extends":"airbnb-base"
              }
          */
          {
            test: /.js$/,            //对js文件进行语法检查
            exclude: /node_modules/, //忽略第三方的库
            loader: 'eslint-loader',
            options: {
              // 自动修复
              fix: true,
            },
          },
        ],
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: './src/index.html',
        }),
      ],
      mode: 'development',
    };

    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, 'build'),
      },
      module: {
        rules:[
          /* 
            js兼容性处理:babel-loader  @babel/core  @babel/preset-env
              1/基本js兼容性处理 -->@babel/preset-env
                问题:只能转换基本语法,如promise不能转换
    
              2/全部js兼容性处理  -->@babel/polyfill
                 只需要在index.js 引入,  第一行添加代码  import '@babel/polyfill'
                问题:我只要解决部分兼容性问题,但是要将所有兼容性代码全部引入,体积太大了
              3.需要做兼容性处理的就做:按需加载 -- core-js   执行一下 npm i core-js
          */
         {
           test:/.js$/,
           exclude:/node_modules/,
           loader:'babel-loader',
           options:{
             //预设:只是babel做怎么样的兼容性处理
            //  presets:['@babel/preset-env'] 在处理第三个问题时,这里需要修改一下
            presets:[
              [
                '@babel/preset-env',
                {
                  //按需加载
                  useBuiltIns:'usage',
                  //指定core-js版本
                  corejs:{
                    version:3
                  },
                  //指定兼容性做到哪个版本浏览器
                  targets:{
                    chrome:'60',
                    firefox:'60',
                    ie:'9',
                    safari:'10',
                    edge:'17'
                  }
                }
              ]
            ]
           }
         }
        ],
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: './src/index.html',
        }),
      ],
      mode: 'development',
    };

    html压缩和js压缩

    //生产环境下会自动压缩js代码

    在webpack.config.js中mode设置为 生产环境

     mode:'production'

    html需要配置,需要在new HtmlWebpackPlug()中配置

    plgins:[
       new HtmlWebpackPlugin({
           template:'./src/index.html',
           minify:{
             //移除空格
             collapseWhitespace:true
             //移除注释
             removeComments:true
    
          }
       })   
    ]
  • 相关阅读:
    eslint 入门项目搭建过程
    ES6 模块化笔记
    闭包
    JavaScript 内存相关知识
    Mac 配置Charles,抓取移动设备数据
    jquery.cookie的path坑
    如何模拟click事件,打开一个a标签链接?
    6月份开发问题整理
    js 淡入淡出的tab选项卡
    点击弹出模态框-以登录表单为例
  • 原文地址:https://www.cnblogs.com/zmztya/p/14711351.html
Copyright © 2011-2022 走看看