webpack5学习笔记—基础篇

2023-10-30

目录

1. webpack

1.1 Webpack是什么?有什么用?

1.2 webpack的几个概念

2. webpack的基础使用

3.2.1 安装

3.2.2 webpack配置文件

3.2.3 打包命令

3. 资源模块

resource

inline

source

asset

 3. loader

1. 什么是loader

2. 处理css文件

2.1 加载css和less

2.2 抽离和压缩css

3. 图片资源

4. 字体资源

5. 数据资源


1. webpack

1.1 Webpack是什么?有什么用?

webpack是一个前端构建工具模块打包工具(module bundler),能根据模块的依赖关系进行静态分析,将各个模块按照特定的规则和顺序组织在一起,打包生成对应的静态资源(bundle),缩小项目体积,提高加载速度

功能:

  • less/sass -> css

  • ES6/7/8 -> ES5

  • html/css/js -> 压缩合并

webpack将所有的文件都都当做模块(module)处理

1.2 webpack的几个概念

Entry(入口)指示 webpack具体从源码目录哪个文件为入口起点开始打包。webpack从入口文件开始检索,将具有依赖关系的模块生成一颗依赖树,得到一个chunk。一个工程打包时可能生成一个或多个chunk。

在一个工程中可以定义多个入口,每一个入口都会产生一个结果资源 bundle

output:由chunk得到的打包产物一般称为bundle,output用于指示bundle输出位置与命名

Loader能够去处理非 JS文件,如在打包过程中Loader将less、sass等文件生成webpack能识别的资源,一次处理一个

2. webpack的基础使用

3.2.1 安装

安装webpack前,需要先安装Node.js,可以通过以下命令来检查是否安装,若没安装Node.js,可以进入官网下载

node -v
新建一个项目目录,进入目录后初始化项目
npm init

按提示输入项目的名称、版本、描述、作者等信息,回车为默认,之后目录出现一个package.json文件,打开可以看到刚才输入的信息

 接下来安装webpack,webpack-cli

全局安装(不推荐):

npm i webpack webpack-cli -g

本地安装

npm i webpack webpack-cli --save-dev 
不推荐 全局安装 webpack 。这会将你项目中的 webpack 锁定到指定版本,并且在使用不同的 webpack 版本的项目中, 可能会导致构建失败

 在项目目录下创建src文件夹(项目源代码目录)

3.2.2 webpack配置文件

没有任何配置的情况下打包,会在dist文件夹下生成一个main.js文件,同时会有警告The 'mode' option has not been set

可以在项目根目录下新建 webpack.config.js 用于配置文件,由于文件是在node.js里运行,所以应使用CommonJS模块的module.exports定义

const path = require('path')
module.exports = {
    entry: './src/index.js',
    
    output: {
        filename: 'bundle.js',// 指定输出文件的文件名

        //输出文件夹必须定义为绝对路径, __dirname nodejs的变量,代表当前文件绝对路径
        path: path.resolve(__dirname, './dist')  
    }, 
    module:{},//解析css,image文件等loader

    plugins:[],// 配置插件
    
    mode:'development', // 开发环境
}

3.2.3 打包命令

若已经全局安装webpack,可直接输入webpack命令打包输出

webpack

使用本地环境进行打包输出

npx webpack

3. 资源模块

  • asset/resource:发送一个单独的文件并导出 URL
  • asset/inline:导出一个资源的 Data URI ( 64位图 )
  • asset/source:导出资源的源代码
  • asset:在导出一个资源的 Data URI 和发送一个单独的文件之间自动进行选择

resource

修改配置文件:

图片的输出文件名,我们可以让其都输出在images文件夹下面,[contenthash]表示文件名称,[ext]表示图片文件的后缀,比如.png.jpg.gif等,[query]表可能存在的参数

module.exports = {
  ...
  module: {
    rules: [
      {
        // 监听资源文件
        test: /\.png$/,
        // 设置资源类型
        type: 'asset/resource',
        generator: {
          // 生成资源名称
          filename: 'images/[contenthash][ext][query]'
        }
      }
    ]
  }
}

 准备资源文件,在入口文件引入。打包后在指定目录下生成了一个单独的文件

 同时导出了URL

 

inline

修改配置文件:

module.exports = {
  ...
  module: {
    rules: [
      {
        // 监听资源文件
        test: /\.svg$/,
        // 设置资源类型
        type: 'asset/inline'
      }
    ]
  }
}

准备资源文件,在入口文件引入,打包后在浏览器中检查,此时得到的是Data URI ( 64位图 )

source

修改配置文件:

module.exports = {
  ...
  module: {
    rules: [
      {
        // 监听资源文件
        test: /\.txt$/,
        // 设置资源类型
        type: 'source'
      }
    ]
  }
}

 准备资源文件,打包后在浏览器中检查,可以看到此时导出的是资源的源代码

asset

asset会介于asset/resourceasset/inline之间,在发送一个单独的文件并导出URL导出一个资源data URI之间做选择

webpack5会判断加载资源的大小,默认情况下,以8k为界限来判断:

  • 当资源大于8k时,自动按asset/resource来判断
  • 当资源小于8k时,自动按asset/inline来判断

修改配置文件,可以通过修改 maxSize 来改变界限值大小

module.exports = {
  ...
  module: {
    rules: [
      {
        // 监听资源文件
        test: /\.jpg$/,
        // 设置资源类型
        type: 'asset',
        parser: {
          dataUrlCondition: {
            maxSize: 4 * 1024 // 4kb
          }
        }
      }
    ]
  }
}

 3. loader

1. 什么是loader

loader   webpack 能够去处理其他类型的文件,并将它们转换为 有效模块 ,以供
应用程序使用,以及被添加到依赖图中。
webpack 的配置中, loader 有两个 属性
  • test 属性,识别出哪些文件会被转换。
  • use 属性,定义出在进行转换时,应该使用哪个 loader

2. 处理css文件

2.1 加载css和less

需要下载样式处理解析器 css-loaderstyle-loader

npm i css-loader style-loader -D

若要解析less文件,则下载 less-loader 用于解析

npm i less-loader less -D

配置 webpack.config.js 文件中的module

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.(css|less)$/,
        use: ['style-loader', 'css-loader','less-loader']
      }
    ]
  }
}

2.2 抽离和压缩css

mini-css-extract-plugin是将css单独打包成一个文件的插件,它为每个包含css的js文件都创建一个css文件,首先下载插件(需要在webpack5中使用)

npm i mini-css-extract-plugin -D

之后配置文件,在plugin中实例化插件,并'style-loader' 替换为 MiniCssExtractPlugin.loader

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

plugins: [
  new MiniCssExtractPlugin({
    filename: "styles/[contenthash].css"
  })
],
module: {
  rules: [
    {
      test: /\.(css|less)$/,
      use: [MiniCssExtractPlugin.loader, "css-loader"]
    }
  ];
}

npx webpack进行打包,可以看到dist目录下多了一个style文件夹,里面就是打包好的css

同时在 app.html 文件中能自动引入打包好的css,非常方便

 此时打包好的css文件还没有经过压缩,进行压缩需要下载 css-minimizer-webpack-plugin 插件

npm i css-minimizer-webpack-plugin -D

安装好需要在optimization里进行配置,同时将mode改为production

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')

optimization: {
    minimizer: [
      new CssMinimizerPlugin()
    ]
},
mode: "production"

执行npx webpack,打包后的css已经是压缩后的样子了

3. 图片资源

webpack 5 中,可以使用内置的 Asset Modules 直接引入文件

4. 字体资源

Asset Modules 可以接收并加载任何文件,也包括字体文件,需要配置 webpack.config.js 文件
module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        type: 'asset/resource',
      }
    ]
  }
}

5. 数据资源

要导入 CSVTSV XML等文件,可以使用 csvloaderxml-loader

npm i csv-loader xml-loader -D

修改配置文件

module.exports = {
    module: {
        rules: [
            {
                test: /\.(csv|tsv)$/,
                use: ["csv-loader"],
            },
            {
                test: /\.xml$/,
                use: ["xml-loader"]
            }
        ]
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack5学习笔记—基础篇 的相关文章

随机推荐

  • 007 034 打印一个三角形

    例 使用输出语句输出一个三角形 include
  • 20+个小而精的Python实战案例(附源码和数据)

    公众号 尤而小屋作者 Peter编辑 Peter 大家好 我是Peter 最近小编认真整理了20 个基于python的实战案例 主要包含 数据分析 可视化 机器学习 深度学习 时序预测等 案例的主要特点 提供源码 都是基于jupyter n
  • Java实现扑克牌自动发牌系统

    利用Java的ArrayList实现随机给三个人发扑克牌 import java util ArrayList import java util List import java util Random class Card private
  • Linux 必备工具, 命令与例子

    目录 1 wget 2 screen 3 unzip gzip 4 netstat 5 git 6 composer 7 docker 8 docker compose 9 timedatectl set timezone Asia Sha
  • binfmt_misc

    一 binfmt misc是什么 binfmt misc是内核中的一个功能 它能将非本机的二进制文件与特定的解析器自动匹配起来 进行二进制解析 例如 在x86上解析arm64架构的二进制 通过binfmt misc可以注册解析器来处理指定二
  • JNI GetFieldID和GetMethodID函数解释及方法签名

    1 GetFieldID是得到java类中的参数ID GetMethodID得到java类中方法的ID 它们只能调用类中声明为 public的参数或方法 举例说明 jclass c env gt FindClass env com came
  • nodejs开发环境安装

    安装环境 win7 64位 访问nodejs官网 http nodejs org 点击Download链接 选择Windows Installer 下载安装包 直接安装即可 安装成功后 在命令窗口 cmd node 查看是否成功 若果没有成
  • UART、RS-232、RS-422、RS-485的区别

    v3学院带你一次性认清UART RS 232 RS 422 RS 485的区别 https www cnblogs com laokai p 6488910 html 通讯问题 和交通问题一样 也有高速 低速 拥堵 中断等等各种情况 如果把
  • LBP算法及其改进算法

    LBP LBP指局部二值模式 英文全称 Local Binary Pattern 是一种用来描述图像局部特征的算子 LBP特征具有灰度不变性和旋转不变性等显著优点 它是由T Ojala M Pietik inen 和 D Harwood在1
  • 第二十五章 Chisel进阶——隐式参数的应用

    用Chisel编写的CPU 比如Rocket Chip RISCV Mini等 都有一个特点 就是可以用一个配置文件来裁剪电路 这利用了Scala的模式匹配 样例类 偏函数 可选值 隐式定义等语法 本章内容就是来为读者详细解释它的工作机制
  • VC++ HBITMAP保存文件

    请先看下面这段代码 BOOL SaveBmp HBITMAP bmp string path FILE f fopen path c str wb if f return 0 BITMAP bmpinfo GetObject bmp siz
  • 既然敢于炮轰C++,那么Linus的C++造诣和编程水平如何呢?

    之前有一篇文章谈到Linux 之父对 C 进行了炮轰 说它是糟糕程序员的垃圾语言 引起了大家的较多讨论 毕竟 我们都知道Linus Torvalds为了Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注 后来又看到大家
  • MSF令牌窃取

    令牌简介及原理 令牌就是系统的临时密钥 相当于账户名和密码 原来决定是否允许这次请求和判断是属于哪一个用户的 他允许你不提供密码或其他凭证的前提下访问网络和系统资源 令牌最大的特点就是随机性 不可预测 一般黑客或软件无法猜测出来 令牌有很多
  • Docker 镜像和容器的导入导出及常用命令

    作者 微枫Micromaple 来源 CSDN博客 Docker 镜像和容器的导入导出 1 1 镜像的导入导出 1 1 1 镜像的保存 通过镜像ID保存 方式一 docker save image id gt image save tar
  • Redis数据迁移:方法二AOF

    启动2个实例 开启AOF备份 源实例 127 0 0 1 7000 目标实例 127 0 0 1 8000 127 0 0 1 7000 中有k1 k100 一共100个key 文件目录如下 7000 conf配置如下 standalone
  • 计算机用户帐户域怎么查找,win7计算机域怎么查?小编教你查看计算机域、工作机组的方法...

    win7计算机域怎么查 当我们在同一个工作机组的情况下我们可以互相访问传输文件 非常方便 但是有的用户的工作机组或者域不同导致无法正常使用局域网的现象 这个时候我们就可以通过查看这些计算机使用的域工作机组是否一致 在 域 模式下 至少有一台
  • 突破50亿美元的想象:RPA市场持续被看好

    RPA 机器人流程自动化 指用软件机器人实现业务处理的自动化 是当下科技领域最热门的一个领域之一 RPA机器人使用用户界面 UI 捕获数据并模拟人类操作应用程序 它们能够模仿大多数人类用户的行为 识别 触发 响应并和其他系统进行通信 以此来
  • 控制台运行XX.jar时出现 “jar中没有主清单属性“解决方法

    1 首先我是用Maven导出到包 得到的jar文件保存在 2 在这个文件目录下cmd运行 执行java jar 01helloworld jar这句命令提示出现 XX jar中没有主清单属性 3 解决方法 有两种解决办法 springboo
  • 上传本地Vue项目到github和gh-pages预览

    利用git命令将项目上传到github 1 登陆自己的github账号 点击new repository进行创建一个新的仓库 如下图所示 2 用命令将项目上传 1 先进入项目文件夹 通过命令 git init 把这个目录变成git可以管理的
  • webpack5学习笔记—基础篇

    目录 1 webpack 1 1 Webpack是什么 有什么用 1 2 webpack的几个概念 2 webpack的基础使用 3 2 1 安装 3 2 2 webpack配置文件 3 2 3 打包命令 3 资源模块 resource i