一、webpack基础

news2025/7/26 14:16:20

webpack基础

一、webpack是什么

webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。

说白了webpack就是一个构建和管理静态资源的工具,在我们使用框架开发时,它会在我们内部的一个或者多个入口根据我们引入的各个模块将他们根据一定的规则都处理成一个个的静态资源文件,从而方便我们进行引入使用。

依赖图如下:
在这里插入图片描述

二、webpack优缺点

优点:

  • 模块化开发。在webpack中所有的资源都可以模块化(js, css, image等),可以更方便的管理,迁移和开发。
  • 语法编译。可以很方便的将浏览器不支持的语法(es6, jsx等等)借助其他loader进行按需编译,预处理等。
  • 社区完善。扩展能力强,有丰富的插件并且支持自己编写插件和loader。
  • 项目优化。因为有了上述这些有点和功能所以它可以更好的支持我们对项目进行优化(动态打包、代码分离、按需加载、代码压缩、静态资源压缩、缓存配置等)。

缺点:

  • 配置繁琐。
  • 项目复杂时打包较慢。
  • 对服务端渲染不友好

三、webpack基础概念

1、模式(mode)

mode可以设置webpack在构建时的模式 生产模式和开发模式,当选择模式后,webpack自身会根据自动开启一写内置的功能。

默认值为 production。

如:

module.exports = {
  mode: 'production',
};

2、入口(entry)

entry设置webpack从哪个文件开始进行打包,并收集依赖项。

可以设置多个入口。

如:

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

3、出口(output)

output告诉webpack在哪里输出打包好的文件,以什么样的方式命名这些输出的文件等。

默认值是 ./dist/main.js。

如:

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',
  },
};

4、loader

webpack 本身只能理解 JavaScript 和 JSON 文件,但是项目中还会遇到其他的文件(如css, less等)这个时候就需要使用loader去处理这些文件,并将他们输出为可以使用的资源。

它有两个属性:

  • test: 匹配哪些要处理的文件。
  • use: 在处理文件时应该使用哪些loader。

如:

const path = require('path');

module.exports = {
  module: {
    rules: [{ test: /\.txt$/, use: 'raw-loader' }],
  },
};

5、插件(plugin)

loader用于解析和处理文件,plugin则是为了扩展webpack的能力,可以进行 打包优化、资源管理、注入环境变量等等。

如:

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

module.exports = {
  plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};

6、解析(Resolve)

resolve用来对webpack设置文件扩展名、目录别名等等。

如:

module.exports = {
    resolve: {
      extensions: ['.js', '.jsx', '.json']
    },
};

7、优化(Optimization)

optimization用来设置webpack的内置优化性能优化,如代码分割、代码压缩等。

如:

module.exports = {
  optimization: {
    splitChunks: { },
    minimizer: [ ],
  },
};

四、总结

webpack本质上是一个静态资源模块打包工具,我们自己指定需要打包文件的入口,并且设置一定的规则,然后它就会从入口文件开始根据引入的依赖项将所有的资源构建出一个依赖图,在根据设置规则输出处理后的静态资源文件输出到我们指定的目录里面。

但是它本身只能解析js和json文件,我们在处理其他文件时需要手动的去设置去引入其他的插件才能完成我们想要的处理结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATool软件使用实验(22)

实验目的 1、学习ATool软件监控主机行为的原理; 2、学习利用ATool软件监控可疑进程的行为; 3、学习利用ATool软件实现对本机进行文件、注册表管理; 4、学习利用ATool软件实现对本机进行内核模块信息和HOOK信息查看。 预备知识 ATool是针…

axios请求响应结果的结构,axios的请求对象

axios请求响应结果的结构 config:配置对象,包括很多内容,请求类型,请求url,请求体等等 data:响应体,服务器返回结果,并且将结果进行json解析,转为对象 headers:响应的头信息 requ…

Telink之标准SDK的介绍_1

前提:常见的项目架构:应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个): algorithm,application,boot,common,drivers,proj_lib,stack,v…

YOLOv5害虫识别项目代码打包完整上传Gitee仓库(已开源)以及git上传速率限制踩坑记录

YOLOv5害虫识别项目代码打包完整上传Gitee仓库(已开源)以及git上传速率限制踩坑记录 ps: ​ 最近很多小伙伴需要这个害虫识别项目的源码,由于文件过大,所以将代码完整上传至gitee,所有文件、教程、论文、以及代码模型…

Python之metaclass和dataclass

metaclass:MetaClass元类,本质也是一个类,但和普通类的用法不同,它可以对类内部的定义(包括类属性和类方法)进行动态的修改。可以这么说,使用元类的主要目的就是为了实现在创建类时,能够动态地改…

ProcessExplorer工具使用(24)

实验目的 1、了解Process Explorer的使用方法预备知识 Process Explorer(可执行文件名为procexp.exe)是一款由Sysinternals开发的Windows系统和应用程序监视工具,目前Sysinternals已经被微软收购,此款不仅结合了文件监视和注册表监…

日报周报月报工作总结生成器【智能文案生成器】

日报周报月报工作总结生成器【智能文案生成器】 天天写日报,我真的快奔溃了! 摸了一天鱼,下班还要写日报; 划了一周的水,周末还要写周报; 啊啊啊啊… 在职场上,尤其是互联网公司里&#xff0c…

Python的数据分析相关的框架

Python特别强大,也是一款可以实现可数据分析语言,它有很多开源的库和工具,可以帮助数据科学家处理和分析数据。 以下是一些常用的Python库和工具: NumPy:NumPy是一个Python库,用于处理大型多维数组和矩阵&…

小程序技术如何提升企业的移动研发效率?

随着移动互联网的普及,移动应用程序已成为企业营销和服务的重要途径。随着技术的不断发展和革新,移动应用程序的开发方式也在不断地演变。 一些技术趋势 1、跨平台开发 跨平台开发已成为移动应用程序开发的趋势。根据 Statista 的报告,截至…

洗地机哪家强?洗地机排行榜

随着清洁行业电器的开展,越来越多的新颖工具和电器开端进入消费者的生活之中。众所周知,面对美不胜收的清洁电器产品,选购也是一大头疼事,应该怎样选购洗地机等清洁电器呢,实在的用户体验和清洁效率莫过于消费者最看重…

如何给电脑重装系统

如何给电脑重装系统 UltraISO(软碟通)、Win10镜像下载UltraISO(软碟通)安装启动盘的制作重装系统 UltraISO(软碟通)、镜像下载: UltraISO(软碟通)安装包下载: 英文版下载链接:http://coderyyn.cn/software/uiso9_pe.exe中文版下载链接&am…

35 openEuler搭建repo(yum)服务器-创建、更新本地repo源

文章目录35 openEuler搭建repo(yum)服务器-创建、更新本地repo源35.1 获取ISO发布包35.2 挂载ISO创建repo源35.3 创建本地repo源35.4 更新repo源35 openEuler搭建repo(yum)服务器-创建、更新本地repo源 使用mount挂载&#xff0c…

openpnp - 为贴片工程中的PCB上的mark点元件创建openpnp可识别的定位封装

文章目录openpnp - 为贴片工程中的PCB上的mark点元件创建openpnp可识别的定位封装概述做自己PCB视觉识别用的Mark点封装ENDopenpnp - 为贴片工程中的PCB上的mark点元件创建openpnp可识别的定位封装 概述 建立openpnp Job, brd之后, 载入坐标文件, 精确定位3个mark点, 精确定位…

C++基础了解-03-C++变量类型

C变量类型 一、变量类型 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。…

C++ Butterworth N阶滤波器设计

介绍一个 Butterworth Nth 滤波器设计系数的函数,像 Matlab 函数一样的: [bl,al]butter(but_order,Ws); 和 [bh,ah]butter(but_order,2*bandwidth(1)/fs,high);rtfilter 在 Ububtu 中,容易找到: $ aptitude search ~dbutterwo…

Linux安装Oracle数据库

Linux安装Oracle数据库 文章目录Linux安装Oracle数据库0. 写在前面1. Oracle 数据库1.1 简介1.2 Oracle 与 MySQL 的SQL 区别2. 前置准备2.1 安装依赖包2.2 配置用户组2.3 上传安装包并解压2.4 修改配置文件 sysctl.conf2.5 修改配置文件 limits.conf2.6 设置环境变量3. Linux最…

基于层次分析法的轴间预瞄和轴距预瞄俯仰半车LQR控制仿真分析(重型汽车)

目录 前言 1. 半车悬架模型 2. LQR最优控制原理简述 3. 基于LQR的半车悬架轴间预瞄和轴距预瞄仿真分析 3.1仿真模型 3.2仿真结果 4.总结 前言 上篇文章简谈了轴距预瞄和轴间预瞄的原理以及仿真分析,可以发现对于轴间预瞄和轴距预瞄其控制效果相对于不带预瞄…

Fluter MMKV 初始化失败 Failed to load dynamic library ‘libmmkv.so‘

出现一个bug:vivo y66 (android 6.0)的一个手机,在被杀死进程后,重新进入,mmkv初始化失败,会报找不到so库的错追到代码是在这一行出了问题也查了很多,包括mmkv的issue里面也找了很多…

【阿里云】Apsara Clouder云计算专项技能认证-云服务器ECS入门,考试真题分享

以下是阿里云Apsara Clouder云计算专项技能认证-云服务器ECS入门真题汇总篇分享: 1.下列哪一个不是重置ECS密码的步骤? A. 查看实例详情 B.进入控制台 C.远程连接ECS D.点击控制台“概览” 2.针对云服务器ECS安全组说法正确的是 A.是一种物理防火墙 B.仅用于控制…

testng+reportng进行单元测试并生成好看的报告

TestNg的来源: JUnit 框架是 Java 语言单元测试当前的一站式解决方案。这个框架值得称赞,因为它把测试驱动的开发思想介绍给 Java 开发人员并教给他们如何有效地编写单元测试。但是,在过去的几年中,JUnit 的改进不大;所以&#x…