【NPM】工程化npm(依赖)包开发之基础知识

随着前端项目越来越大且复杂,我这非专业的也来研究下npm库的开发了!
最近研究来看,资料错综复杂百花齐放,给整迷糊了~~
这不,来做个笔记梳理下!
这篇就先简单介绍下几个概念知识

前言

工具不是关键,形成一套稳健的流程方案才是核心

工程化项目开发流程(阶段): 技术选型 -> 统一规范 -> 开发 -> 检查 -> 测试 -> 部署 -> 追踪

今天先整理下常见或不认识的一些基础知识吧~


一、包管理器

  • npm
    • npmjs.com (即包管理器也是依赖包资源社区)
  • yarn
    • classic.yarnpkg.com (1.x版本)
    • v3.yarnpkg.com (3.x版本)
    • yarnpkg.com (新4.x版)
  • pnpm
    • pnpm.io
  • bun
    • bun.sh (2023年9月8日正式发布)

二、包结构模式(或策略)

npm包管理的主流模式(或策略)

  • Monorepo 单一仓库
  • Multirepo 多仓库
  • 其他(可以借鉴软件工程开发结构模式)

1. Monorepo

Monorepo(单一仓库)结构模式是指将一个项目的所有代码、依赖和工具都放在一个单一的代码仓库中进行管理。

  • 优点:

    • 统一管理:所有的代码和依赖都在一个地方,方便进行版本控制、构建和测试。开发人员可以更容易地了解整个项目的结构和代码,提高开发效率。
    • 代码复用:可以方便地在不同的项目模块之间共享代码和工具。这有助于减少重复开发,提高代码的可维护性和可扩展性。
    • 依赖管理:可以统一管理项目的依赖关系,避免不同模块之间的依赖冲突。同时,也可以更容易地进行依赖升级和安全漏洞修复。
    • 持续集成和部署(CI/CD):可以更容易地实现持续集成和部署,因为所有的代码都在一个仓库中,可以使用统一的构建和部署流程。
  • 缺点:

    • 仓库规模大:随着项目的增长,仓库的规模可能会变得非常大,导致克隆和更新仓库的时间变长。
    • 权限管理复杂:如果有多个团队或开发者在同一个仓库中工作,权限管理可能会变得复杂。需要确保不同的团队或开发者只能访问他们需要的部分。
    • 构建时间长:由于所有的代码都在一个仓库中,构建时间可能会比较长。特别是在大型项目中,构建时间可能会成为一个问题。
  • 应用案例:

    • Vue.js 的代码库包含了核心库、路由、状态管理等多个模块,它们都在一个 Monorepo 中进行管理。
    • Ant DesignElement UI等…

2. Multirepo

Multirepo(多仓库)结构模式是指将一个大型项目或软件系统拆分成多个独立的代码仓库进行管理。每个仓库都有自己独立的版本控制、开发流程和发布周期。

  • 优点:

    • 独立性高:各个模块可以独立开发、测试和部署,互不干扰。这使得开发团队可以更加专注于特定的功能模块,提高开发效率。
    • 灵活性强:可以根据项目的需求和团队的组织架构,灵活地调整各个仓库的结构和内容。例如,可以将不同的业务模块、技术栈或团队分配到不同的仓库中。
    • 易于维护:由于每个仓库的规模相对较小,维护起来更加容易。可以针对特定的问题进行快速修复和改进,而不会影响到整个项目。
    • 版本控制清晰:每个仓库都有自己独立的版本号,可以更加清晰地管理和追踪各个模块的版本变化。
  • 缺点:

    • 集成复杂:当需要将多个仓库中的模块集成到一起时,可能会面临一些挑战。需要进行复杂的依赖管理和版本协调,以确保各个模块之间的兼容性。
    • 重复工作:可能会存在一些重复的工作,例如配置管理、测试框架等。需要在每个仓库中进行单独的设置和维护,增加了开发成本。
    • 协作困难:如果不同的仓库由不同的团队负责开发,可能会出现协作困难的情况。需要建立有效的沟通机制和协作流程,以确保各个团队之间的协调和合作。
  • 应用案例:

    • Node.js 的核心模块有自己独立的开发仓库,而大量的第三方模块则分布在不同的 npm 仓库中

三、代码规范

代码规范…

  • 对团队协同来说,可以增加效率;
  • 对个人来说,养成一个好习惯,日后回头看代码不至于云里雾里的

这块论资源还是蛮多的…各种编码规范,这里就收集一些热门的提供参考吧!

  • js 规范:

    • 《阿里巴巴前端开发规范》 - 涵盖了 HTML、CSS、JavaScript 等方面的规范,非常详细且具有很高的实用性。对变量命名、代码格式、注释规范等都有明确规定,有助于提高团队协作效率和代码质量。
    • 《Airbnb JavaScript 风格指南》 - 提供了全面的 JavaScript 编码规范,包括语法、命名约定、函数定义等方面,被很多开发者和团队采用。
    • 《Google JavaScript 风格指南》 - 来自谷歌的规范,注重代码的可读性和可维护性。
    • 百度前端编码规范 3.9k
  • css 规范

    • 《BEM (Block Element Modifier) Methodology》 - BEM 是一种流行的 CSS 命名规范和架构方法,它可以帮助你创建可维护、可复用的 CSS 代码。这个网站详细介绍了 BEM 的概念和使用方法。

今天先到这吧~其他再整理整理…

四、规范检查

五、测试

在工程化项目里进行代码质量测试,又分为:单元测试集成测试性能测试兼容测试,好像还有个叫端到端测试;

为什么要进行单元测试?

  • 确保代码的正确性:在开发过程中,我们可能会不断修改代码。单元测试可以帮助我们快速发现代码修改是否引入了新的错误。
  • 提高开发效率:当有新的功能需求时,如果已经有了完善的单元测试,我们可以更放心地进行代码修改,而不用担心破坏已有功能。

常见的测试工具有:Jest、Mocha

下面对不同测试阶段做个简单介绍:

1. 单元测试

这个通常是最小的测试单元(目标);
比如:函数、方法、独立模块、组件这类的

2. 集成测试

3. 性能测试

4. 兼容测试

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

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

相关文章

Django操作数据库

Django操作数据库 1、ORM框架2、ORM-创建数据库3、ORM-连接数据库4、ORM-操作表4.1、类创建表4.2、修改表结构4.2.1、删除表结构4.2.2、新增表结构 5、ORM-增删改查5.1、新增数据5.2、删除数据5.3、查询数据5.4、更新数据 1、ORM框架 Django开发操作数据库很简单,内…

项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143105881 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、Op…

如何解决JMeter响应数据乱码?

问题: 解决: 1、找到JMeter安装目录下的bin目录 2、 在bin目录下,打开" jmeter.properties "文件 3、搜索"sampleresult.default.encoding" 4、改成"sampleresult.default.encodingUTF-8",去掉前面…

数字图像处理:图像分割应用

数字图像处理:图像分割应用 图像分割是图像处理中的一个关键步骤,其目的是将图像分成具有不同特征的区域,以便进一步的分析和处理。 1.1 阈值分割法 阈值分割法(Thresholding)是一种基于图像灰度级或颜色的分割方法&…

图片写入GPS经纬高信息

近期项目中需要往java平台传输图片,直接使用QNetworkAccessManager和QHttpMultipart类即可,其他博文中有分享。 主要是平台接口对所传输图片有要求:需要包含GPS信息(经度、纬度、高度)。 Qt无法直接实现,…

教育平台的创新设计:Spring Boot实现

3系统分析 3.1可行性分析 通过对本信息化在线教学平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本信息化在线教学平台采用Spring Boot框架,JA…

【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

Axure重要元件三——中继器修改数据

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器修改数据 主要内容:显示编辑内容、表格赋值、修改数据 应用场景:更新行、表单数据行修改 案例展示: 正文…

前端算法合集-2(含面试题-美团一面)

主要考察的就是数组扁平化,由浅入深吧 ①利用tostring()和split() let arr [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]] let newarrarr.toString().split(,) let numarrnewarr.map((item)>{itemNumber(item)return item }) console.log(numarr) ②利用…

AndroidStudio移动开发:使用Service播放音乐【步骤】

目录 一、创建新application 二、准备音乐文件 三、创建项目和布局(如果需要交互界面的话,这里简单假设一个基本布局) 四、创建MusicService类 五、在MainActivity中启动和控制Service(也可以另外创建MusicActivity类&#x…

MoeCTF 2024 ---Misc方向WP

安全杂项 signin 题目描述: xdsec的小伙伴们和参赛者来上课,碰巧这一天签到系统坏了,作为老师的你,要帮他们 教师代签。 特殊提醒:luo同学今天好像在宿舍打游戏,不想来上课,这是严重的缺勤行为…

【数据分享】全国人口-人口年龄结构和抚养比(1990-2021年)

数据介绍 一级标题指标名称单位指标解释人口年末总人口万人年末人口数指每年12月31日24时的人口数。年度统计的全国人口总数内未包括香港、澳门特别行政区和台湾省以及海外华侨人数。1981年及以前人口数据为户籍统计数;1982、1990、2000、2010、2020年数据为当年人口…

实操上手TinyEngine低代码引擎插件化开发

1.背景介绍 1.1 TinyEngine 低代码引擎简介 低代码开发是近些年非常热门的一种开发方式,用户可以通过可视化的方式,简单拖拽,不写代码或者编写少量代码,类似搭积木一样搭建业务应用。 TinyEngine是一个强大的低代码引擎&#x…

Redis 常用指令详解

Redis是一款开源的、高性能的键值对存储数据库,常用于缓存、会话存储以及其他需要快速访问的数据场景。本文将介绍Redis的一些常用指令,并通过代码示例进行说明。 一、连接操作指令 1. 连接 Redis 服务器 ./redis-cli -h 127.0.0.1 -p 63792. 认证&a…

计算广告第三版pdf

需要该书pdf版本的同学点赞,私信我:

Spark_入库时报错ORA-00001 unique constraint violated 解决办法

首先可能是数据入重复了 检查一下看看是否入库前删除了分区的数据,可能是重复数据入库的问题,如果不是这个那么继续排查。 入库的数据有问题,检测方法 如果报主键冲突了,则group by 一下id,date,然后select 的时候加一…

飞睿智能超宽带UWB音频传输模块,超低延迟数据传输,实时音频声音更纯净

在信息爆炸的时代,音频传输技术正以未有的速度发展,创新我们进入一个全新的听觉世界。今天,我们要探讨的,就是这场技术创新中的一颗璀璨明星——飞睿智能超宽带(UWB)音频传输模块。它以其独特的优势&#x…

RHCSA课后练习1

文件管理命令练习 vi/vim练习 vim newfile 按 a 进入编辑模式 :r 文件 在末尾模式中插入文件 :%s/#/ /g 先将#标记为匹配项:%g#d 再删除 : set nu 开启行号 自行组cp 用grep命令找到6段再用tail命令选中第六段 用find查找 [A-Z]代表所有…

如何写一个视频编码器演示篇

先前写过《视频编码原理简介》,有朋友问光代码和文字不太真切,能否补充几张图片,今天我们演示一下: 这是第一帧画面:P1(我们的参考帧) 这是第二帧画面:P2(需要编码的帧&…

python包以及异常、模块、包的综合案例(较难)

1.自定义包 python中模块是一个文件,而包就是一个文件夹 有这个_init_.py就是python包,没有就是简单的文件夹 包的作用:当我们的模块越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包…