webpack-note

webpack-note

webpack官网

webpack功能

  1. 将多个文件合并(打包),减少http请求,提高效率
  2. 对代码进行编译,消除浏览器的兼容性
  3. 对代码进行压缩,减少文件体积,提高加载速度,降低带宽的流量消耗
  4. 检测代码质量,提高开发效率
  5. 针对不同环境,提供不同的打包策略

安装环境

npm install webpack webpack-cli -D
npx webpack ./src/index.js --output-path ./dist --mode=development

初始环境配置

在根目录下新建webpack.config.js

拥有以下基本属性

const {resolve}=require('path')
module.exports={
    //模式development,production
    mode:'development',
    
    //入口文件
    entry:'./src/index.js',
    
    //出口文件
    output:{
        //如果不指定输出目录,那么默认是dirst
        //输出目录必须是绝对路径
        path:resolve(__dirname,'output')
        
        //指定输出的文件名称
        filename:'bundle.js'
    },
    
    //模块配置
    module:{
    	rules:[
    		//支配多个规则
    	]
	},
    
    //开发服务器(虚拟服务器)!!!!
    devServer:{}
    
    //插件配置
    plugins:[]
}

匹配css,less,sass等

匹配css文件

  1. npm i style-loader css-loader -D

  2. module:{
        rules:[
            test:/\.css$/i,
            use:[
            	//use规则从下到上调用
            	//style-loader负责把css内容的js代码挂载到页面的style标签中
            	'style-loader',
            
            	//css-loader负责遍历src的所有css文件,将css打包到输出目录
            	'css-loader'
        	]
        ]
    }
    
  3. npx webpack

匹配less文件和sass文件和上面类似

MiniCssExtractPlugin

将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件

npm install --save-dev mini-css-extract-plugin

1.安装插件

2.在webpack.config.js中

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  plugins: [new MiniCssExtractPlugin({
      filename:'css/[name].css'
  })],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
    ],
  },
};

3.在js文件中

import './src/style.css'

4.npx webpack

CssMinimizerWebpackPlugin

优化和压缩 CSS

npm install css-minimizer-webpack-plugin --save-dev

1.安装插件

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

module.exports = {
  module: {
    rules: [
      {
        test: /.s?css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
      },
    ],
  },
  //如果在开发者模式下想要压缩css文件需添加下面参数
  optimization: {
    minimizer: true
  },
  plugins: [new MiniCssExtractPlugin()],
};

3.npx webpack

stylelint

帮助你在样式代码中避免错误并强制规范

npm install stylelint@13.13.1 stylelint-config-standard@22.0.0 stylelint-webpack-plugin@2.1.1 -D

1.在package.json添加配置

{
    "stylelint": {
    "extends": "stylelint-config-standard"
  },
}

2.在webpack.config.json中

const StylelintPlugin=require('stylelint-webpack-plugin')

module.exports = {
  plugins: [new StylelintPlugin({
      //指定那些格式文件进行css校验
      files:['src/css/*.{css,less,sass,scss}'],
      //尽可能自动修复不合规范的格式
      fix:true
  })],
  
};

3.npx webpack

postcss-loader

使用 PostCSS 处理 CSS 的 loader,兼容个平台css

npm install postcss-loader autoprefixer -D

1.安装插件

2.创建.browerslistrc

# 注释是这样写的,以#号开头
last 1 version #最后的一个版本
> 1%  #代表全球超过1%使用的浏览器

3.创建根目录postcss.config.js

module.exports={
    plugins:[
        require('autoprefixer')
        // 'postcss-preset-env'
    ]
}

4.在webpack.config.js中

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  plugins: [new MiniCssExtractPlugin({
      filename:'css/[name].css'
  })],
  module: {
    rules: [
      {
        test: /\.css$/i,
        //postcss-loader要加在css-loader后(逻辑上是前)
        //也就是要先处理postcss-loader再处理css-loader
        use: [MiniCssExtractPlugin.loader, "css-loader","postcss-loader"],
      },
    ],
  },
};

5.npx webpack

HtmlWebpackPlugin

可以让该插件为你生成一个 HTML 文件,使用 lodash 模板提供模板,或者使用你自己的 loader

npm install --save-dev html-webpack-plugin

1.安装插件

const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');

module.exports = {
  entry: 'index.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: 'index_bundle.js',
  },
  plugins: [new HtmlWebpackPlugin({
      //指定模板
      template:'./src/index.html',
      
      //文件名
      filename:'index.html',
      
      //标题
      title:'xxx',
      
      //如果在开发者模式下也想压缩html文件,可以使用minify
      minify:{
          collapseWhitespace: true,
          keepClosingSlash: true,
          removeComments: true,
          removeRedundantAttributes: true,
          removeScriptTypeAttributes: true,
          removeStyleLinkTypeAttributes: true,
          useShortDoctype: true
     	}
  })],
};

3.在html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= HtmlWebpackPlugin.options.title %></title>
</head>
<body>
    
</body>
</html>

CopyWebpackPlugin

将已存在的单个文件或整个目录复制到生成目录。

npm install copy-webpack-plugin --save-dev

1.安装插件

2.目录结构

D:\webpackDemo
├─package.json
├─webpack.config.js
├─ouput
├─node_modules
├─src
  ├─public
	├─favicon.ico
  ├─index.js
        
        

3.webpack.config.js

const CopyWebpackPlugin=require('copy-webpack-plugin')

module.exports = {
  plugins: [new CopyWebpackPlugin({
      patterns:[
           {
              // 从src的public
              from:'./src/public',
              // 到output的public
              to:'public'
            }
        ]
  })],
  
};

4.npx webpack

clean-webpack-plugin

一个 webpack 插件,用于删除/清理您的构建文件夹。

npm install --save-dev clean-webpack-plugin

1.安装插件

2.在webpack.config中

//注意只能使用解构的方式
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
  plugins: [new CleanWebpackPlugin()],
  
};

3.npx webpack

babel-loader

此 package 允许你使用 Babelwebpack 转译 JavaScript 文件,使之兼容es6+基础语法。

npm install babel-loader @babel/core @babel/preset-env -D

1.安装插件

2.webpack.config.js中


module.exports = {
  module:{
      rules:[
          {
              test:/\.m?js$/i,
              //针对src的所有文件,在内部进行转换语法,src的js代码不变
              //除了node_module目录里的文件,其他目录都要进行转换
              exclude:/node_module/,
              use:{
                  loader:'babel-loader',
                  options:{
                      presets:[
                          '@babel/preset-env'
                      ]
                  }
              }
          }
      ]
  }
  
};

3.npx webpack

@babel/polyfill

兼容js更高阶的语法,要在js es6+基本语法配置完整基础上,也就是上面的配置也要进行完善,但是会把其规范内的全部转义,体积大不推荐

npm install @babel/polyfill -D

1.安装插件

2.在index.js中

import '@babel/polyfill'

3.npx webpack

core-js

按需转义js高阶语法,也要在js es6+基本语法配置完整基础上

npm install core-js -D

1.安装插件

2.webpack.config.js

module.exports = {
  module:{
      rules:[
          {
              test:/\.m?js$/i,
              //针对src的所有文件,在内部进行转换语法,src的js代码不变
              //除了node_module目录里的文件,其他目录都要进行转换
              exclude:/node_module/,
              use:{
                  loader:'babel-loader',
                  options:{
                      presets:[
                          '@babel/preset-env',
                          {
                              //按需加载
                              useBuiltIns:'usage',
                              //指定core.js版本
                              //和package.json一致
                              corejs:{
                                  version:3
                              }
                          }
                      ]
                  }
              }
          }
      ]
  }
  
};

3.注意:index.js里的import '@babel/polyfill’要删掉

eslint

对js文件进行校验

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

eslint:对js进行格式校验
eslint-config-airbnb-base:包含格式校验规则
eslint-webpack-plugin:webpack插件
eslint-plugin-import:读取eslint配置项配置

1.在package.json中

{
    "eslintConfig": {
    "extends": [
      "airbnb-base"
    ],
    "rules": {
      "no-undef": "off",
      "no-console": "off",
      "no-unused-vars": "off"
    }
  }
}

2.在webpack.config.js中

const EsLintPLugin=require('eslint-webpack-plugin')
module.exports = {
  plugins: [new EsLintPLugin({
      //指定要校验的文件后缀
      extension:['js','json'],
      exclude:'/node_modules/',
      //尽可能校验
      fix:true
  })],
  
};

file-loader

将文件发送到输出目录

npm install file-loader --save-dev

1.index.js

import img from './file.png';

2.webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'file-loader',
          },
        ],
        type:'javascript/auto'
      },
    ],
  },
};

3.npx webpack

url-loader

webpack 的加载器,它将文件转换为 base64 URI

npm install url-loader --save-dev

1.index.js

import img from './file.png';

2.style.css

body{
    background:url(./img/file.jpg)
}

3.webpack.config.js(css里的font 文件也可加载)

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options:{
                //限制大小,小于这个大小,图片会被转成base64
                limit:8*1024,
                name:"[name].[ext]",
                //启用commonjs语法,一般加上
                esModule:false
            }
          },
        ],
        type:'javascript/auto'
      },
    ],
  },
};

4.注意:一般有问题的话最好再安装以下file-loader

5.npx webpack

asset

webpack5自带的,使用他来加载资源文件,而无需其他loader,加载js,css文件里的资源

1.webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif)$/i,
       	parser:{
            dataUrlCondition:{
                maxSize:8*1024
            }
        },
        generator:{
            //存放在指定的输出目录的文件夹,并默认名称
            filename:"image/[name][ext]"
        }
        type:'asset'
      },
    ],
  },
};
module.exports = {
  module: {
    rules: [
      {
        test: /\.(eot|svg|ttf|woff|woff2)$/i,
       	parser:{
            dataUrlCondition:{
                maxSize:8*1024
            }
        },
        generator:{
            //存放在指定的输出目录的文件夹,并默认名称
            filename:"fonts/[name][ext]"
        }
        type:'asset'
      },
    ],
  },
};

html-loader

将 HTML 导出为字符串。当编译器需要时,将压缩 HTML 字符串。

也可使html文件中的一些资源压缩

npm install --save-dev html-loader

1.安装插件

2.webpack.config.js中

module.exports = {
  module: {
    rules: [
      {
        test: /\.(htm|html)$/i,
        use:{
            options:{
            	esModule:false
        	}
        }
      },
    ],
  },
};

webpack-dev-server

为你提供了一个基本的 web server,并且具有 live reloading(实时重新加载) 功能。

npm install --save-dev webpack-dev-server

1.安装插件

2.webpack.config.js中

module.exports={
    //开发服务器
    devServer:{
        //加载的内容的路径
        static:resolve(__dirname,'output'),
        
        //启用gzip能够以75%的压缩率来压缩资源
        compress:true,
        
        //端口号
        port:9999,
        
        //启动热加载(自动更新)
        hot:false,
        liveReload:true,
        
        //配置代理 重要!!!
        proxy:{
            '/api':{
                //请求的host
                //http://localhost:9999/api/users==>https://api.github.com/api/users
                // http://api.github.com/api/users=>https://api.github.com/users
                target:'https://api.github.com',
                pathRewrite:{
                    '^/api':''
                }
            },
            changeOrigin:true
        }
        
    },
    //配置目标
    target:'web'
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值