手撸俄罗斯方块——工程介绍

概述

接下来我们将从工程角度分析本项目。本项目采用大仓模式,利用 yarn + lerna 对项目进行管理,项目结构如下:

.
├── packages
│   ├── core 俄罗斯方块的核心逻辑
│   ├── console 俄罗斯方块的控制台版本的实现
│   ├── web 俄罗斯方块的web版本的实现
├── app 基于vue的web版本测试入口
├── docs 文档

其中,core 是俄罗斯方块的核心逻辑,console 是俄罗斯方块的控制台版本的实现,web 是俄罗斯方块的 web 版本的实现。彼此之间通过workspace进行关联。

基本介绍

为什么采用大仓模式

按照之前的抽象,core层是抽象出来的核心逻辑,其渲染必须依赖于具体的平台,所以consoleweb层是core的具体实现。这样的设计,使得core层可以被多个平台复用,而不用关心具体的渲染逻辑。因此,肯定会存在多个实现依赖于core层的情况,所以采用大仓模式是最合适的。

对于依赖共享,业界有很多的解决方案,如npm linkyarn linknpm installyarn install等。但是这些方案都有各自的问题,如npm linkyarn link需要手动链接,npm installyarn install会将依赖安装到node_modules中,不利于调试。而lerna则是专门为解决这个问题而生的,它可以将多个包链接到一起,同时可以将依赖安装到根目录的node_modules中,非常适合大仓模式。

开发语言

使用 TS 作为开发语言,个人认为 TS 具有一下优势:

  • 静态类型检查,减少运行时错误
  • 代码提示,提高开发效率
  • 方便生成文档,提高代码可读性。可以输出d.ts文件,方便其他人使用。

编译系统

既然使用了 TS,那就需要对 TS 进行编译。这里使用rollup进行编译,rollup是一个模块打包器,它可以将多个模块打包成一个文件。rollup的优势在于,它可以进行tree-shaking,即只打包使用到的模块,减少打包体积。

测试

单元测试和集成测试,单元测试使用 jest,集成测试则使用专门的项目进行测试。

  • packages/console自带启动脚本,可以通过它快速开启一个控制台版本的俄罗斯方块,方便测试。
  • app使用vue进行测试,可以通过yarn dev启动一个 web 版本的俄罗斯方块,方便测试。

代码规范

使用 eslint 进行代码规范检查

在根目录运行: yarn lint进行代码检查。

同时为了为了保证质量,引入了husky,在提交代码时进行检查。

日志格式

对于 git 的 commit log 的检查,使用commitlint,并配置了husky,在提交代码时进行检查。

发布

使用lerna进行发布,可以一次性发布所有的包。

小结

后续章节我们将详细介绍文中介绍的内容,包括但不限于:

  • 大仓
  • TS
  • rollup
  • jest
  • eslint
  • husky
  • commitlint
  • lerna

介绍这些项目是如何融入到本项目的。

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

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

相关文章

【SpringBoot】单元测试之测试Service方法

测试Service方法 SpringBootTest public class UserServiceTest{ Autowired private UserService userService; Test public void findOne () throws Exception{ Assert.assertEquals("1002",userService.findOne()); } } 测试Controller接口方法 Runwith(S…

TCP Socket编程示例

介绍 本文主要学习TCP socket编程的代码。socket常用于客户端发起连接&#xff0c;服务端一般都会用一些高性能网络框架&#xff0c;不会让你手写socket服务端的。客户端代码基本都差不多。 服务端 server.cpp: #include <iostream> #include <unistd.h> #incl…

[CP_AUTOSAR]_分层软件架构_接口之通信模块交互介绍

目录 1、协议数据单元(PDU)传输2、通信模块的案例2.1、SDU、 PCI & PDU2.2、通信模块构成2.3、从数据传输的角度看Communication2.4、Communication中的接口 在前面 《关于接口的一些说明》 以及  《Memory软件模块接口说明》 中&#xff0c;简要介绍了CP_AUTOSAR分层…

ByteBuf释放注意的问题

Bytebuf需要释放&#xff0c;否则可能导致OOM。 如果bytebbuf传递到了head或tail&#xff0c;不需要我们关心。 在head和tail里&#xff08;head实现了outhandler、inhander。tail实现了inhander&#xff09;&#xff0c;底层自动调用了bytebuf.release。 其他情况需要我们手动…

MySQL(终章)视图, 用户管理, C连接MySQL.

目录 1.视图; 2.用户管理; 1.视图: 1.1 概念和基本操作: 视图本质就是表结构, 虚拟表. 视图和基表数据的改变都会相互影响. 创建视图语法: create view 视图名 as select语句&#xff1b; 修改视图: update set ; 删除视图: drop view 视图名&#xff1b; 1. 2 视图使用规则: …

集成学习的艺术:使用Scikit-Learn实现模型融合

集成学习的艺术&#xff1a;使用Scikit-Learn实现模型融合 在机器学习领域&#xff0c;集成学习是一种强大的技术&#xff0c;它通过结合多个模型的预测来提高整体性能。Scikit-Learn&#xff08;简称sklearn&#xff09;&#xff0c;作为Python中最受欢迎的机器学习库之一&am…

IP地址:由电脑还是网线决定?

IP地址&#xff1a;由电脑还是网线决定&#xff1f; 在互联网时代&#xff0c;IP地址是我们进行网络通信的基础。然而&#xff0c;对于IP地址究竟是由电脑决定还是由网线决定的问题&#xff0c;不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…

减分兔搜题-12123学法减分20题目及答案 #媒体#职场发展

对于即将参加驾驶考试的朋友来说&#xff0c;掌握一些经典题目和答案至关重要。今天&#xff0c;我就为大家带来了这样一份干货——20道驾驶考试题目和答案&#xff0c;助你轻松应对考试&#xff01;这些题目不仅包括了考试中常考的内容&#xff0c;还有针对难点和重点的详细解…

时序数据库-02-聊一聊时序数据库

时序数据库系列 时序数据库-01-时序数据库有哪些&#xff1f;为什么要使用 时序数据库-02-聊一聊时序数据库 时序数据库-03-pentsdb-分布式时序数据库 时序数据库-04-InfluxData-分布式时序数据库 时序数据库-05-TDengine 是一款开源、高性能、云原生的时序数据库 (Time-S…

ETL数据同步之DataX,附赠一套DataX通用模板

今天跟大家分享数据同步datax的模板&#xff0c;小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛&#xff1f; 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一&#xff0c;什么是DataX D…

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

AWS全服务历史年表:发布日期、GA和服务概述一览(一)

我一直在尝试从各种角度撰写关于Amazon Web Services&#xff08;AWS&#xff09;的信息和魅力。由于我喜欢技术历史&#xff0c;这次我总结了AWS服务发布的历史年表。 虽然AWS官方也通过“Whats New”发布了官方公告&#xff0c;但我一直希望能有一篇文章将公告日期、GA日期&…

Java流的奥秘:字节与字符的交响乐章

在Java编程的广阔天地中&#xff0c;数据的流动如同一条条看不见的河流&#xff0c;滋养着程序的生命力。而流(Stream)作为数据传输的核心机制&#xff0c;承载着数据的读写重任。今天&#xff0c;我们将深入探讨字节流与字符流的精妙之处&#xff0c;解锁它们背后的编程艺术。…

视频监控平台LntonCVS视频融合共享平台智慧安防视频监控汇聚应用方案

LntonCVS是一款功能强大且灵活部署的安防视频监控平台。它支持多种主流标准协议&#xff0c;包括GB28181、RTSP/Onvif、RTMP等&#xff0c;同时能够兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统的安防监控功能&#xff0c;还支持接入AI智能分析&#x…

无人机之产业链篇

无人机产业链上游为无人机设计研发及关键原材料的生产&#xff0c;其中关键原材料有金属材料和复合材料两大类&#xff0c;包括钛合金、铝合金、陶瓷基等特殊材料 中游无人机整机制造包括飞行系统、地面系统、任务载荷系统三个方面&#xff0c;是无人机制造的核心部分&#xf…

Adobe国际认证详解-网页设计认证专家行业应用场景解析

在当今数字化时代&#xff0c;网页设计已成为各行各业不可或缺的一环。而网页设计认证专家&#xff0c;作为经过Adobe国际认证体系严格考核的专业人才&#xff0c;正逐渐成为行业内炙手可热的存在。他们凭借深厚的网页设计理论基础和实践经验&#xff0c;为各行各业提供了高质量…

144. 字典序最小的 01 字符串(卡码网周赛第二十六期(23年阿里淘天笔试真题))

题目链接 144. 字典序最小的 01 字符串&#xff08;卡码网周赛第二十六期&#xff08;23年阿里淘天笔试真题&#xff09;&#xff09; 题目描述 小红有一个 01 字符串&#xff0c;她可以进行最多 k 次提作&#xff0c;每次操作可以交换相邻的两个字符&#xff0c;问可以得到的…

java设计模式:03-06-享元模式

享元模式&#xff08;Flyweight Pattern&#xff09; 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享技术来有效地支持大量细粒度对象的重用。享元模式避免了在相似对象间的高开销&#xff0c;通过共享尽可能多的状态来尽量减…

正则表达式:电子邮件地址的格式详解,及常见正则表达式符号的详细解释和匹配方式

一、第一部分是对该段电子邮件的详解 var Regex /^(?:\w\.?)*\w(?:\w\.)*\w$/; 1.^&#xff1a;这个符号表示匹配输入字符串的开始位置。 2.(?:...)&#xff1a;这是一个非捕获组&#xff08;non-capturing group&#xff09;&#xff0c;用于将正则表达式的一部分组合在…