前端架构: 脚手架之多package项目管理和架构
多package项目管理
1 )多package项目管理概述
- 通常来说,当一个项目变大了以后,我们就要对这个项目进行拆分
- 在前端当中,对于项目进行拆分的方式,通常把它称之为javascript包管理
- 需要使用一个工具叫做 npm (Node Package Management)
- 它是使用nodeJS来对包进行一个管理,用了这个包管理以后,项目就可以以大化小
- 把一个复杂的项目拆分成若干个小的项目,如何把一个大的项目进行一个拆分
- 这里就用到 workspaces 和 lerna 这两个特性
- 其实 lerna 是更早出现的一个特性, 而 workspace 是 npm 7 以后默认出现一个特性
- lerna 和 workspace 都是解决复杂项目管理的, 即:多 package 管理
- 了解如何利用 lerna 和 worspace 的这个特性去完成项目的创建,依赖的安装,本地调试,还有项目发布
- 之前也谈到过,Lerna 采用 Yargs 作为脚手架框架
2 )脚手架架构
- 这是一般脚手架的整体架构
- 最下面一层是标准层,也就是说我们整个今天前端能发展成这样
- 它是由一些若干条标准而生成的,其中最重要的标准就是ECMA和Module模块化
- ECMA 它的一个核心产出,其实就是javascript这个开发语言
- 而模块化,它的核心产出,目前还在用的就是CommonJS和ES Module这样2个模块化的标准
- 基于ECMA和module模块化, 产生了 nodejs 框架, Nodejs框架其实核心包含三个部分
- 第一个是 V8引擎,它的用途是用来去做javascript开发语言的一个编译和运行,包括输出最终的一个运行结果
- 第二个是 internal module 主要指向 nodejs 很多的内置库,包括fs文件处理库, path 路径库等等
- 第三个是 一个node的可执行文件
- 由这样的几个部分组成,这个就是Node.js
- 而 Nodejs 之上, 就会生成一个包括管理工具叫 npm
- 我们每个前端项目今天都在去使用 npm, 而 npm 在7版本之后,默认就会附带一个特性叫做 workspace
- 这个 workspace 就是用来做多package 复杂项目管理用的
- 少于7版本的时候,想做复杂项目管理的时候,就要用lerner
- Lerna它是基于 nodejs的 npm 之上生成的一个自己开发的一个包管理工具
- 这个工具最主要的用途就是做很多个小模块之间拼成一个大的项目,做这个大的项目管理就是 Lerna
- 在 npm 7版本之前,我们就会使用 Lerna 去做包管理
- 今天的 Lerna 最新版本已经到 8.1.2, 同时,它已经基于npm的 workspace 特性去进行了重构和改造
- 所以今天依然可以用Lerna来做包管理,它可以帮我们去省略到很多操作的步骤
- 除此之外,像 npm 上面还有一些常用的工具,像webpack这些, Lerna 和 webpack 是属于同一层的这个工具
- 而我们自己的脚手架是基于这些库之上,也就是说我们自己的脚手架会基于Lerna 去进行一个构建
- 构建的时候它核心是会分为6个
- 第一个包是 cli-core 包含脚手架中核心的一个内核,基于这个内核去开展我们具体的业务
- 也就是说上面5个业务只是其中五个功能
- 如果未来我们要开发更多的脚手架的时候,只要再往里面横向的去进行扩充就可以了
- 这就是基于 Lerna 它架构的一个好处,它的横向扩展性很强
- 脚手架的内核不变更的情况下,可以非常轻易的去添加出新的功能
- 否则, 我们每一个脚手架都要重新开发一套全新的代码,然后去做发布,去做部署和运行, 整个过程是比较复杂的
相关文章:
前端架构: 脚手架之多package项目管理和架构
多package项目管理 1 )多package项目管理概述 通常来说,当一个项目变大了以后,我们就要对这个项目进行拆分在前端当中,对于项目进行拆分的方式,通常把它称之为javascript包管理需要使用一个工具叫做 npm (Node Packag…...
【C# 多线程】如何停止正在运行中的子线程
如何停止正在运行中的子线程 通过协作式取消模式强制终止线程(可能存在资源不能及时释放的泄漏风险) 通过协作式取消模式 在线程函数中,你可以周期性地检查一个标志位,以确定是否应该停止线程。该标记位可以是共享变量࿰…...
服务器机房安全守护:五大物理安全实践
服务器机房是数字企业的心脏。无论是企业家还是经验丰富的IT专业人员,都知道服务器机房的安全性至关重要。如果没有采用适当的物理安全措施,其服务器很容易受到盗窃、人为破坏和自然灾害的破坏。 在保护服务器机房的领域内,需要采用多方面的…...
spring boot 修复 Spring Framework URL解析不当漏洞(CVE-2024-22243)
漏洞描述 当应用程序使用UriComponentsBuilder来解析外部提供的URL(如通过查询参数)并对解析的URL的主机执行验证检查时可能容易受到Open重定向攻击和SSRF攻击,导致网络钓鱼和内部网络探测等。 受影响产品或系统 6.1.0 < Spring Framew…...
VR全景HDR拍摄教程
什么是HDR? HDR可以用在哪里? 书面解释:HDR(高动态范围 High Dynamic Range)摄影,是摄影领域广泛使用的一种技术。 是不是有点懵? 我们来看一个实际的拍摄现场环境,你就懂了 我们…...
hive执行select count(1)返回0
背景: 做数据质量检核任务的时候,有些数据表有数据,直接查hive执行select count(1) from table返回的值一直是0 问题原因: hive通过select count(1)或者select count(*) 查询的是元数据库里面的rownum,如果数据表数据是通过load、…...
3D Gaussian splatting 协方差矩阵 球谐函数 简单理解
3D Gaussian splatting 是一种图形和视觉处理技术,常用于体积渲染、点云渲染和其他应用中,以便对数据进行平滑或重建。在这个上下文中,高斯分布(或高斯“splat”)用于表示单个数据点(如一个点云中的点&…...
代码随想录算法刷题训练营day27:LeetCode(39)组合总和、LeetCode(40)组合总和 II、LeetCode(131)分割回文串
代码随想录算法刷题训练营day27:LeetCode(39)组合总和、LeetCode(40)组合总和 II、LeetCode(131)分割回文串 LeetCode(39)组合总和 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;clas…...
docker 容器修改端口和目录映射
一、容器修改端口映射 一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [container-name] -p 8088:80 [image-name]…...
echarts鼠标事件
鼠标事件支持方法 ECharts 支持常规的鼠标事件类型,包括 ‘click’、 ‘dblclick’、 ‘mousedown’、 ‘mousemove’、 ‘mouseup’、 ‘mouseover’、 ‘mouseout’、 ‘globalout’、 ‘contextmenu’ 事件 简单实例 // 基于准备好的dom,初始化EChar…...
【北京迅为】《iTOP-3588开发板网络环境配置手册》第2章 电脑、开发板直连交换机或路由器
RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…...
6.5 共享数据
本节介绍Android的四大组件之一ContentProvider的基本概念和常见用法:首先说明如何使用内容提供器封装内部数据的外部访问接口,然后阐述如何使用内容解析器通过外部接口操作内部数据,最后叙述如何利用内容解析器读写联系人信息,以…...
SpringBoot之Session新增、删除、获取配置与使用
SpringBoot之Session新增、删除、获取配置与使用 文章目录 SpringBoot之Session新增、删除、获取配置与使用1. SpringBoot版本2. 定义增删查Session的类3. 定义Session的监听器4. 使用 自定义根据sessionId进行session的新增、删除、获取操作 1. SpringBoot版本 <parent>…...
Hive UDF 札记
低版本的udf就不说了,太老了,说现在主流的。 1:initialize 方法的进一步理解: 在Apache Hive中,用户自定义函数(UDF)的initialize方法是一个可选的方法,它属于Hive UDF的生命周期…...
npm已经配置淘宝源仍然无法使用
使用npm命令安装Taro框架的时候,尽管已经设置淘宝源但是仍然无法下载,提示错误 >npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/cnpm failed, reason: certificate h…...
Qt5转Qt6笔记
背景 现在的主程序和扩展的dll库都是qt5环境下编译发布的。但是想以后用qt6。所以考虑是否能够在qt5中兼容qt6的动态链接库进行加载。于是...就开始吧 开始 2024-02-23 安装好qt6后,在vs2019中需要新增qt6版本的安装路径。目录在:扩展->QT VS Tools…...
FPGA高端项目:FPGA基于GS2971的SDI视频接收转HDMI输出,提供3套工程源码和技术支持
目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI图像缩放应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用本方案的SDI视频…...
java 锁
在Java中,有多种类型的锁,用于处理多线程编程中的同步和并发问题。以下是Java中常见的锁类型:互斥同步锁(悲观锁) :Synchronized : Java中最基本的同步机制,它提供了一种简单且透明的方式来同步代码块或方法。Synchronized是基于进入和退出监视器对象(monitor)来实现方…...
该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改。
报错原因 在异步的时候,调用了其他异步,导致UI工程线程该变了数据源,所以只需要将线程变为原始的UI线程。 解决方案 await QueuedTask.Run(() > { Application.Current.Dispatcher.Invoke(() >{报错的代码,…...
Mybatis学习笔记:延迟加载
本文是自己的学习笔记,主要参考以下资料 - 马士兵教育 1、延迟加载2、开启延迟加载2.1、配置信息2.2、查询语法2.2.1、前置条件2.2.2、xml语法2.2.3、总结 1、延迟加载 延迟加载是用于优化一对多或者多对多的查询。 比如员工表和部门表,员工表left jo…...
鸣潮自动化助手终极指南:5分钟掌握高效游戏任务管理
鸣潮自动化助手终极指南:5分钟掌握高效游戏任务管理 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 在《鸣潮》这款开放…...
NVIDIA Profile Inspector:解锁200+隐藏显卡设置,让你的游戏性能飙升50%
NVIDIA Profile Inspector:解锁200隐藏显卡设置,让你的游戏性能飙升50% 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾经觉得自己的NVIDIA显卡性能没有完全发挥&#x…...
Qwen3.5-9B-AWQ-4bit效果展示:复杂场景图识别准确率实测与典型失败案例复盘
Qwen3.5-9B-AWQ-4bit效果展示:复杂场景图识别准确率实测与典型失败案例复盘 1. 模型能力概览 Qwen3.5-9B-AWQ-4bit是一款支持图像理解的多模态模型,能够结合上传图片与文字提示词输出中文分析结果。这个量化版本在保持较高识别准确率的同时,…...
Go语言怎么嵌入静态文件_Go语言embed嵌入文件教程【秒懂】
Go 1.16 用 embed 包可将文件编译进二进制,但需满足路径为相对包根的字面量、包与变量声明正确三重约束;embed.FS 要求路径不可拼接、不可跨模块、不支持 ./ 前缀;读取需用 fs.ErrNotExist 判断缺失;HTTP 服务中可直接用 http.Fil…...
混合型MMC多电平整流侧仿真:电压电流双闭环控制、环流抑制与电容电压均压控制策略采用载波移相调...
混合型MMC多电平,整流侧仿真,加入了电压电流双闭环,环流抑制,子模块电容电压均压控制,采用载波移相调制 PS:仿真搭建不易,仅一个仿真最近在实验室熬了几个通宵,终于搞定了混合型MMC多…...
ORA-29934索引关联错误修复指南
修复步骤:1. 检查indextype参数,确保extproc运行正常。2. 重建索引:ALTER INDEX index_name REBUILD PARAMETERS(indextype is ctxsys.context); 3. 远程处理:使用expdp/impdp导出重建,参数加transformoid:n:sys_c0012…...
Stable Yogi Leather-Dress-Collection自动化流程:使用Python脚本批量生成商品图
Stable Yogi Leather-Dress-Collection自动化流程:使用Python脚本批量生成商品图 每次上新都要找设计师做几十张商品图,费时又费钱?产品图风格不统一,影响品牌形象?如果你在电商或内容创作团队,这些问题肯…...
ESP32-C3 蓝牙应用实战:从零构建一个自定义 GATT 服务
1. 环境准备:搭建ESP32-C3开发环境 第一次接触ESP32-C3蓝牙开发的朋友可能会觉得无从下手,其实只要把开发环境搭好就成功了一半。我刚开始用Windows系统开发时踩过不少坑,后来发现用VSCode配合官方ESP-IDF工具链最省心。 首先需要安装乐鑫官方…...
【2026年最新600套毕设项目分享】外卖微信小程序的研究与开发(30099)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 项目演示视频2 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运…...
Elasticsearch 运维必备:列出集群所有索引的5种方法(最全+图解+实战)
Elasticsearch 运维必备:列出集群所有索引的5种方法(最全图解实战)一、前言二、列出 ES 所有索引:整体流程流程图三、Elasticsearch 列出所有索引:核心命令3.1 方法1:_cat/indices(最常用、运维…...
