前端工程化_构建工具和脚手架_学习笔记

news/2025/2/28 15:37:35/文章来源:https://www.cnblogs.com/goicandoit/p/18609689

前文都是对代码级别的转换,下面是工程级别的转换

image-20241215105802950

开发和维护的代码 jsx、sass

运行时需要的代码

不一致

所以需要转换,做转换的工具就叫做构建工具

打包之后的代码就完全脱离了开发环境

  1. 哪种工程更适合开发和维护
  2. 哪种工程更适合运行
  3. 如何转换(打包)

构建工具就是解决上述三个问题

市面上的构建工具有以下这些:

webpack、rollup、esbuild、turbopack、snowpack、grunt、gulp、rspack

webpack 依然是最主流的,下文将进行介绍

构建工具:webpack

webpack怎么认为上面三个问题呢

  1. 哪种工程更适合开发和维护

    • 一切皆为模块
  2. 哪种工程更适合运行

    • 传统工程
  3. 如何转换(打包)

    • image-20241215111035877
    • 通过入口去找依赖关系图,然后打包合并

1.入口

  • AST(抽象语法树)
    • 导入语句
      • 同时支持 ESM、CMJ
      • import、require
    • 模块查找
      • 比如给一个文件夹,会找文件夹中的 index.js

      • 如果没有给./ ../之类的就会去找 node 的模块查找规则,就是看看当前目录有没有 node_modules,没有就一直往上一级找

        • image-20241215112307035
        • 比如上例就会去 node_modules 目录里面去找 jquery,再找到目录下面的 package.json,找到 main 字段再进去找
      • @就是别名,可以配置,在 webpack.config.js 中

2.开发服务器

  • 就像我们经常用的 npm run server
  • 也就是我们在运行命令 webpack serve 时,会启动一个开发服务器
  • 像我们常用的 live server 就是开发服务器
  • webpack 里面内置了一个库,webpack-dev-server,而这个库里面依赖了 express
image-20241215143742039

我们运行 webpack-serve 的时候就会利用这一套工具,来启动一个开发服务器,与此同时它会进行打包,相当于帮我们运行了 npm run build,只是这一次打包是在内存里面完成,并不会把打包结果形成文件,文件是存储数据的介质,不放文件放内存也可以,内存里面也可以存数据,内存中会形成打包结果,然后就是在控制台中给我们提示,提示我们访问的地址,比如8080,点击后此时就由浏览器访问我们的开发服务器了

  1. 浏览器会向开发服务器发送请求
  2. 开发服务器就可以从打包结果中去拿到一个页面
  3. 把页面响应给浏览器
  4. 浏览器就会渲染页面,渲染过程继续请求 js、css
  5. 开发服务器又继续从打包结果中去那相应的 js、css

这就解决了我们手动打包,手动运行浏览器的过程

除此之外,还能实现源码变化后刷新的功能

那么浏览器怎么知道刷新呢,这就涉及到 websocket\HMR

3.文件指纹

image-20241215145302648

比如这个打包结果,这就涉及到哈希值了

打过过程中文件内容的变化,会影响到这个文件指纹

换句话说:文件内容不变,这一块就不会变

文件指纹是在 webpack 里面进行配置的,可以不产生指纹,但一般情况下我们都希望他产生指纹

image-20241215152051230

如果不使用指纹会出现这种情况

  1. 浏览器看到这个 js 会向服务器去请求 js,像 js、css 服务器一般会加入缓存,让浏览器缓存起来,期限一般很久
  2. 那浏览器下次再遇到这个 js 就会从缓存中取,此时服务器更新了内容浏览器就不知道,会产生问题

使用文件指纹就不一样了:

image-20241215152129556
  1. 页面中引入12345这个 js,服务器给了,因为带了文件指纹,就能让浏览器缓存很久3、5百年也行
  2. 然后再用到这个 js 的时候就会使用缓存了
  3. 有一天服务器更新代码,重新打包后文件指纹就变了
  4. 页面变了之后页面的 js、css也会跟着变
    • 像页面(也就是html)一般是不加入缓存的
  5. 页面的路径变成了一个新的文件,由于 a123b.js 在浏览器是没有缓存的,路径变了缓存就无法命中,因此就必须请求新的文件
    • 缓存一般是和请求路径相互绑定的
  6. 然后对新的文件再进行缓存

4.css modules

为了避免类名冲突,打包结果里面的类名全都变化了

image-20241215153020350

这样,源码里面的类名和打包结果的类名就对应起来了

5.源码地图

就是打包文件里的 .map 文件

它是用于将运行的代码和源代码对应起来的,否则难以调试、打断点

image-20241215153335924 image-20241215153427285

这里面就是源码了

小结

webpack是通过两个扩展点

一个是 loader

一个是 plugin

加载器和插件,通过这两个点可以把代码转换工具全部融合

脚手架

常用的有:

vue-cli

vite

cra

umijs

脚手架有两个功能

  1. 提供界面和交互
  2. 提供工程模板

提供界面和交互也就是我们平时安装脚手架的时候,在终端中出现的对话,比如

npm install -g @vue/cli

安装完之后就可以搭建项目了

vue create my-vue-project
image-20241216112638808

就可以开始选择了

项目创建完之后就可以使用脚手架提供的工程模板了

END

本文主要对构建工具和脚手架进行简要介绍,首先明确了构建工具的作用,因为开发和维护的代码和运行时的代码是不一致,需要构建工具来进行转换,而且这个转换是工程级别的转换;然后介绍了主流构建工具 webpack,介绍了 webpack 的入口、开发服务器、文件指纹、css modules以及源码地图;最后简单介绍了脚手架

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法之链表

链表 移除链表元素 对于链表来说,删除头节点和中间节点具体操作不一样是因为想要删除一个中间节点,必须要知道该节点的前一个节点,而头节点没有前一个节点。使用虚拟头节点,统一节点的删除操作,用一个虚拟头节点的next指向head,这个链表中的每个元素都会有前一个节点,从…

算法之数组

数组 二分查找 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 题解:如果等于nums[middle],返回middle;否则返回left或者low。移除元素 在排序数组中查找target的开始位置和结束位置。 二分法不…

年会筹备大揭秘:看板软件如何助力团队协作?

看板软件以其直观、灵活和高效的特点,成为企业年会准备的得力助手。通过看板软件,企业可以更加高效地组织和管理年会筹备工作,确保活动的顺利进行,并为企业文化的传播和员工凝聚力的提升做出贡献。看板软件以其直观、灵活和高效的特点,成为企业年会准备的得力助手。通过看…

【每日一题】20241216

我做出了选择。也许不是好的选择,但选择了就要承担后果。【每日一题】已知函数 \(f(x)=\sin|x|+2|\sin x|\),则 \(f(x)\) 在 \((-2\pi,\pi)\) 的零点个数为________. 已知函数 \(f(x)(x\in\mathbf{R})\) 满足 \(f(-x)=2-f(x)\).设方程 \(f(x)-\frac{x+1}{x}=0\) 的 \(m\) 个…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

原生鸿蒙系统是我国首个实现全栈自研的操作系统,全面突破操作系统核心技术,真正实现了国产操作系统的自主可控。在这样的背景下,RUM 推出的用于监控原生鸿蒙的 SDK 为鸿蒙应用的开发者提供了更进一步的便利,对衡量用户体验关键的指标进行全面的分析和追踪。作者:杨兰馨(楠…

零基础学习人工智能—Python—Pytorch学习(十二)

前言 本文介绍使用神经网络进行实战。 使用的代码是《零基础学习人工智能—Python—Pytorch学习(九)》里的代码。 代码实现 mudule定义 首先我们自定义一个module,创建一个torch_test17_Model.py文件(这个module要单独用个py文件定义),如下: import torch.nn as nn import…

700PB数据的数仓依然“快稳省”!ByteHouse这本白皮书揭秘关键(内附下载链接)

12月10日,《火山引擎ByteHouse云数仓产品白皮书》在线上发布。在数字经济蓬勃发展的今天,企业面临着数据量爆炸性增长、数据分析需求日益复杂的双重挑战。传统的数据仓库解决方案已经难以满足企业对数据处理速度和灵活性的高要求。为了应对这些挑战,火山引擎于2021年正式推出…

子查询关联条件字段没有指定表的别名导致的查询结果不正确的问题

子查询关联查询问题,子查询关联条件字段没有指定表的别名导致的查询结果不正确的问题首先介绍一下表结构和背景;有两个数据库表,供应商XX任务主表和供应商等级变更记录表; 等级表里面有多个任务,两张表是通过同名称的字段,supplier_id关联; ①SQL是XX任务表关联供应商等…

Xinference环境搭建推理测试

引子 写了很多篇开源大模型的环境部署与推理搭建,截止到目前,开源大模型已经发展较为完善。个人觉得,产品和项目维度来看更多的是如果去落地实现,也就是大模型的最后一公里的应用开发。最近看到Xinference一个开源很火的推理框架。OK,那就让我们开始吧。 一、框架介绍 Xin…

前端工程化_CSS 工具链_学习笔记

本文主要介绍了 CSS 工具链,可以看出工具链的出现都是为了解决语言的问题,文中就介绍了预处理器和后处理器,预处理器主要介绍了 sass,并举了星空这个例子,sass 是通过与预编译器编译成 css 后给 html 使用;后处理器则介绍了 postcss,其中 postcss 和 babel 类似,都有很…

车载以太网TSN设计及测试解决方案

智能汽车电子电气架构全面向中央+区域式发展,车载通信新技术是新架构技术栈的重要组成部分。车载以太网时间敏感网络TSN技术凭借其低延时、高可靠的特点获得多家OEM的认可。依赖多年技术研发及数十个项目的实践积累,经纬恒润可为客户提供全面、专业且本土化的TSN设计与测试解…

看板软件:跨境电商圣诞营销加速器

看板软件在跨境电商中发挥着多重作用,特别是在圣诞节这一关键销售时期。通过清晰有序的任务管理、灵活适配的自定义功能、高效的信息整合与数据分析、以及精准有效的营销策略应用,看板软件显著提升了跨境电商团队的协作效率和销售能力。圣诞节作为全球最重要的购物节日之一,…