• webpack 学习笔记


    一、webpack概述

    webpack 是一个用于应用程序的前端资源构建工具静态模块打包工具

    • 资源构建工具

      • 浏览器不支持处理 ES6语法 、TypeScriptlessscss 等内容,需要多种工具转换,分别维护麻烦费事
      • 构建工具——将多种转换工具集成,把源代码转换成发布到线上的可执行HTMLCSSJavaScript代码
    • 静态模块打包

      • 入口文件中引入各种资源,形成依赖关系图;
      • 根究依赖关系图将资源按照先后顺序引入,形成 chunk (代码块);
      • 将代码块进行各项操作(打包),如lesscss
      • 将打包后的资源( bundle)输出

      webpack 将前端的所有资源文件(js/json/css/img/less/...)作为模块处理

      它将根据内部构建一个依赖图进行静态分析,打包生成对应的静态资源(bundle)

      1592060494435

    二、webpack核心概念

    入口(entry)

    • 指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图

    • 默认值是 ./src/index.js

      module.exports = {
        entry: './path/to/my/entry/file.js'
      };
      

    输出(output)

    • 指示 webpack 打包后的资源 bundle 输出的位置,以及如何命名
    • 默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中
    const path = require('path');
    
    module.exports = {
      entry: './path/to/my/entry/file.js',
      output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'my-first-webpack.bundle.js'
      }
    };
    

    loader

    • webpack 只能理解 JavaScript 和 JSON 文件

    • 让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块

    • loader 两个属性

      • test 属性,识别出哪些文件会被转换
      • use 属性,定义出在进行转换时,应该使用哪个 loader
      module.exports = {
        module: {
          rules: [
            { test: /.txt$/, use: 'raw-loader' }
          ]
        }
      };
      

    插件(plugin)

    • 插件用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量

    • 使用插件

      • 需要 require() 获取,然后把它添加到 plugins 数组中
      • 多数插件可以通过选项(option)自定义
      • 也可以通过使用 new 操作符来创建一个插件实例,多次使用同一个插件
      const HtmlWebpackPlugin = require('html-webpack-plugin'); 
      // 为应用程序生成HTML文件,并自动注入所有生成的 bundle
      const webpack = require('webpack'); 
      // 用于访问内置插件
      
      module.exports = {
        module: {
          rules: [
            { test: /.txt$/, use: 'raw-loader' }
          ]
        },
        plugins: [
          new HtmlWebpackPlugin({template: './src/index.html'})
        ]
      };
      

    模式(mode)

    • 指示 webpack 使用相应模式的配置
    • mode 参数 development, productionnone

    1592062770825

    三、webpack 简单使用

    (一)简单使用

    npm init -y //初始化
    npm i webpack wepack-cli -g //全局安装
    npm i webpack wepack-cli -D //本地安装
    

    文件目录结构

    1592063459220

    //运行指令
    webpack ./src/index.js -o ./dist/main.js --mode=development //开发环境
    webpack ./src/index.js -o ./dist/main.js --mode=production //生产环境
    

    打包构建结果

    1592063670856

    ——生产环境 ./dist/main.js将会被压缩

    运行打包文件

    node ./dist/main.js
    

    (二)其他测试

    入口文件导入其他资源

    //入口文件
    //webpack使用 处理js资源 成功
    function add(x, y) {
      return x + y;
    }
    console.log(add(2, 3));
    
    //webpack使用 处理json资源 成功
    import data from './data.json';
    console.log(data);
    
    //webpack使用 处理css资源等其他 打包失败
    import './index.css';
    

    1592064391641

    • 存在问题
      • 不能编译打包 css、img 等文件
      • 不能将 js 的 es6 基本语法转化为 es5 以下语法

    四、webpack 开发环境的基本配置

    (一)创建配置文件

    • 创建文件 webpack.config.js

    • 配置内容

      • webpack 遵循 CommonJS 模块规范
      • use 数组中 loader 执行顺序:从右到左、从下到上、依次执行
      const path = require('path'); // node 内置核心模块,用来处理路径问题
      module.exports = {
        entry: './src/index.js', //入口文件
        output: {
          path: path.resolve(__dirname, 'dist'), //输出文件路径
          filename: 'main.js', //输出文件名
        },
        //loader配置
        module: {
          //文件匹配规则
          rules: [
            { test: /.txt$/, use: 'raw-loader' }
          ],
        //plugins配置
        plugins: [
          //
        ],
        //模式
        mode: 'development',
      };
      
    • 运行指令: webpack

    (二)打包样式资源

    • 下载对应loader

      npm i style-loader css-loader
      
    • 配置文件——文件匹配规则

      • css-loader: 将css文件变成commonjs模块加载到js中,内容是样式字符串
      • style-loader:创建style标签,将js中的样式资源插入,添加到head中生效
       module: {
          //文件匹配规则
          rules: [
            { test: /.css$/, use: ['style-loader', 'css-loader'] },
            { test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
          ]
        }
      
    • 样式生效

      1592102217705

      1592102875017

    处理less资源 需要下载 less-loader 和 less

    (三)打包 HTML 资源

    • 创建html文件

      1592103171879

    • 使用 plugin 处理html资源

      • 下载 html-webpack-plugin

        npm i html-webpack-plugin -D
        
      • 引入 html-webpack-plugin

        //webpack.config.js
        const HtmlWebpackPlugin = require('html-webpack-plugin');
        
    • 修改配置文件—— plugin

      plugins: [
          new HtmlWebpackPlugin({
            template: './src/index.html',
          })
      ]
      
      • html-webpack-plugin作用
        • 默认会创建一个空的 HTML,自动引入打包输出的所有资源(JS/CSS)
        • 生成创建html入口文件,配置Nhtml-webpack-plugin可以生成N个页面入口
    • 运行指令: webpack

    (四)打包图片资源

    • 创建文件

      1592203202864

    • 下载安装 loader 包

      npm install url-loader file-loader --save-dev
      
    • 修改配置文件

      //支持样式中使用背景图片
      rules: [
        {
          test: /.(jpg|png|gif)$/,
          //使用url-loader还需要安装file-loader
          loader: 'url-loader',
          options: {
            //图片小于8kb 进行base64处理
            limit: 8 * 1024
            //关闭 url-loader 的 es6 模块化,使用 commonjs 解析
            esModule: false,
            //[hash:10]图片hash值前10位  [ext]取文件原来扩展名
            name: '[hash:10].[ext]',
          }
        }
      ]
      
      • base64
        • 优点:减少请求数量,用于缓解服务器压力
        • 缺点:图片体积增加,文件请求速度变慢
      • 默认不能处理html中直接使用图片
      npm install html-loader --save-dev
      
      {
          test: /.html$/,
          loader: 'html-loader',
      }
      
      • html-loader——用于处理html文件的img图片,负责引入图片让 url-loader处理
    • 运行指令: webpack

    (五)打包其他资源

  • 相关阅读:
    Haproxy 配置项及配置实例-Haproxy入门教程
    Spring Boot 配置-Spring Boot教程深入浅出系列
    RMI 接口和类概述-RMI快速入门教程
    分布式和非分布式模型对比-RMI快速入门教程
    RMI分布式对象模型-RMI快速入门教程
    RMI介绍-RMI快速入门教程
    Qt编写可视化大屏电子看板系统17-柱状堆积图
    Qt开发经验小技巧161-165
    Qt编写安防视频监控系统60-子模块4云台控制
    MyBatis的关联映射,resultMap元素之collection子元素,实现一对多关联关系(节选自:Java EE企业级应用开发教程)
  • 原文地址:https://www.cnblogs.com/zengbin13/p/13138060.html
Copyright © 2020-2023  润新知