zoukankan      html  css  js  c++  java
  • 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

    (五)打包其他资源

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/zengbin13/p/13138060.html
Copyright © 2011-2022 走看看