webpack

webpack 作用

  • Webpack 唯一的功能就是打包

安装 webpack

  • cnpm install webpack -g

webpack配置文件

  • webpack,config.js
  • 	module.exports={
    		mode:'none','production','development',
    		entry:'入口' || {roukou1:'',roukou2:''},
    		output:{
    			path,
    			filename
    		}
    	}
    

案例

  • 多入口
  • webpack.config.js
    • const path = require('path');
      
      module.exports={
          mode:'development',
          entry:{
              index:'/src/1.js',
              admin:'/src/2.js'
          },
          output:{
              path:path.resolve(__dirname,'build'),
              filename:'[name].min.js'
          }
      }
      
      可使用 [name]作为占位符
  • 1.js
    • let a =10;
      
      alert(a);
      
  • 2.js
    • import $ from 'jquery';
      
      $(()=>{
          alert(10);
      });
      
  • 打包结果
    • 在这里插入图片描述
    • 在这里插入图片描述

loader

  • 帮助 webpack 处理 js 以外的文件
  • 安装 css-loaderstyle-loader
  • loader 顺序为从后往前执行

css-loader style-loader

  • webpack.config.js
    const path = require('path');
    
    module.exports={
        mode:'development',
        entry:{
            index:'/src/js/1.js',
            admin:'/src/js/2.js'
        },
        output:{
            path:path.resolve(__dirname,'build'),
            filename:'[name].min.js'
        },
        module:{
            rules:[
                {
                    test:/\.css$/,
                    use:['style-loader','css-loader']
                }
            ]
        }
    }
    
  • css文件
    body{background: yellow;}
    
  • js文件
    import $ from 'jquery';
    import '../css/main.css';
    
    
    $(()=>{
        alert(10);
    });
    
  • 打包
    • 在这里插入图片描述
    • 打包结果
      在这里插入图片描述
  • 浏览器中查看效果
    • html代码
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Document</title>
          <script src="build/2.min.js"></script>
      </head>
      <body>
          
      </body>
      </html>
      
    • 结果
      在这里插入图片描述

postcee-loader 和 autoprefixer

  • postcee-loader 给浏览器添加 前缀
  • autoprefixer 选择性添加前缀 配合 postcss-loader使用
  • webpack.config.js
    const path = require('path');
    
    module.exports={
        mode:'development',
        entry:'/src/js/1.js',
        output:{
            path:path.resolve(__dirname,'build'),
            filename:'bundle.min.js'
        },
        module:{
            rules:[
                {
                    test:/\.css$/,
                    use:['style-loader','css-loader','postcss-loader']
                }
            ]
        },
        
    }
    
  • postcss.config.js中
    	module.exports = {
        "plugins": [
            require('autoprefixer')({
                browsers: [
                    "> 1%",
                    "last 2 versions",
                    "not ie <= 8"
                ]
            })
        ]
    }
    
  • 结果
    在这里插入图片描述
    自动添加了前缀
    在这里插入图片描述
  • 注意
    在这里插入图片描述

file-loader

  • 作用:file-loader可以用来帮助webpack打包处理一系列的图片文件;比如:.png 、 .jpg 、.jepg等格式的图片;
  • 使用file-loader打包图片的结果:使用file-loader打包的图片会给每张图片都生成一个随机的hash值作为图片的名字;
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 打包结果
    在这里插入图片描述

url-loader

  • url-loader可以设置图片大小限制,当图片超过限制时,其表现行为等同于file-loader,而当图片不超过限制时,则会将图片以base64的形式打包进css文件,以减少请求次数。
  • limit 控制文件的大小 如: 8*1024表示8k以内转DataURL
  • webpack.config.js
    	const path = require('path');
    
    module.exports = {
        mode: 'development',
        entry: '/src/js/1.js',
        output: {
            path: path.resolve(__dirname, 'build'),
            filename: 'bundle.min.js'
        },
        module: {
            rules: [{
                    test: /\.css$/,
                    use: ['style-loader', 'css-loader', 'postcss-loader']
                },
                {
                    test: /\.(jpg|png|gif)$/i,
                    use: {
                        loader: 'url-loader',
                        options: {
                            outputPath: 'img/',
                            limit: 8 * 1024,
                            esModule:false
                        }
                    },
                    type:'javascript/auto'
                }
            ]
        },
    }
    
    注:
    在这里插入图片描述
    • 结果
      • base64
        在这里插入图片描述
      • 正常图片
        在这里插入图片描述

编译es6

  • cnpm i babel-loader @babel/core @babel/preset-env -D
  • webpack.config.js
    const path = require('path');
    
    module.exports = {
        mode: 'development',
        entry: '/src/js/1.js',
        output: {
            path: path.resolve(__dirname, 'build'),
            filename: 'bundle.min.js'
        },
        module: {
            rules: [{
                    test: /\.css$/,
                    use: ['style-loader', 'css-loader', 'postcss-loader']
                },
                {
                    test: /\.(jpg|png|gif)$/i,
                    use: {
                        loader: 'url-loader',
                        options: {
                            outputPath: 'img/',
                            limit: 8 * 1024,
                            esModule: false
                        }
                    },
                    type: 'javascript/auto'
                },
    
                {
                    test: /\.jsx?$/i,
                    exclude: '/node_modules/', //不编译 node_modules
                    use: {
                        loader: 'babel-loader',
                        options: {
                            presets: [
                                ["@babel/preset-env", {
                                    "targets": {
                                        "browsers": ["> 1%", "last 2 versions"]
                                    }
                                }]
                            ],
                        }
                    }
                },
            ]
        },
    
    }
    
  • 1.js
    import '../css/main.css';
    
    
    let a = 12;
    let b = 15;
    
    const sum = (n1, n2) => {
        return n1 + n2;
    }
    
    alert(sum(a, b));
    
  • 编译结果
    在这里插入图片描述

source-map 查看在源文件中错误的位置

  • 在这里插入图片描述
  • 1.js
    import '../css/main.css';
    
    
    let a = 12;
    let b = 15;
    
    const sum = (n1, n2) => {
        return n1 + n2;
    }
    
    alert(sum(a, c));
    
  • 结果
    在这里插入图片描述

代码风格管理 eslint

  • 安装:cnpm i eslint eslint-loader -D
  • 配置文件 .eslintrc
    {
        "root": true, 
        "parserOptions":{
            "sourceType": "module",
            "parser": "babel-eslint",
            "ecmaVersion": 2015
        },
        "env": {
            "browser": true
        },
        "rules": {
            "indent": ["error", 2],//缩进, 两个空格
            "linebreak-style":["error","windows"],//换行 
            "quotes": ["error", "double"],//引号 都是双引号
            "semi": ["error", "always"],//结尾  必须分号
            "no-console": "error",
            "arrow-parens": 0
        }
    }
    
  • webpack.config.js
    const path = require('path');
    
    module.exports = {
        mode: 'development', //模式
        entry: './src/js/1.js', //入口
        //出口
        output: {
            path: path.resolve(__dirname, 'build'),
            filename: 'bundle.min.js'
        },
        module: {
            rules: [{
                test: /\.jsx?/i,
                loader: 'eslint-loader',
                exclude: '/node_modules/',
                options: {
                    esModule: false
                }
            }]
        },
    
        devtool: 'source-map'
    }
    
  • 1.js
    let a = 12;
    let b = 50;
    
    const sum = (n1, n2) => {
      return n1 + n2;
    };
    
    alert(sum(a,b));
    

dev-server

  • 作用:这个工具不仅能帮我们打包,还能帮我们起了服务器。还能帮我们自动打开浏览器,还能自动更新
  • 安装 cnpm i webpack webpack-cli webpack-dev-server -D
  • 案例:
    const path = require('path');
    
    module.exports = {
        mode: 'development',
        entry: '/src/js/1.js',
        output: {
            path: path.resolve(__dirname, 'build'),
            filename: 'bundle.min.js'
        },
        module: {
            rules: [{
                    test: /\.css$/,
                    use: ['style-loader', 'css-loader', 'postcss-loader']
                },
                {
                    test: /\.(jpg|png|gif)$/i,
                    use: {
                        loader: 'url-loader',
                        options: {
                            outputPath: 'img/',
                            limit: 8 * 1024,
                            esModule: false
                        }
                    },
                    type: 'javascript/auto'
                },
    
                {
                    test: /\.jsx?$/i,
                    exclude: '/node_modules/', //不编译 node_modules
                    use: {
                        loader: 'babel-loader',
                        options: {
                            presets: [
                                ["@babel/preset-env", {
                                    "targets": {
                                        "browsers": ["> 1%", "last 2 versions"]
                                    }
                                }]
                            ],
                        }
                    }
                },
            ]
        },
        devtool:'source-map',
    
        // 配置 webpack-dev-server
        devServer:{
            // 新版本 webpack 不支持 contentBase 应添加下面这段话,已显示目录
            static:{
                directory:__dirname,
            },
            open:true  // 是否自动打开浏览器
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值