前端架构: 脚手架包管理工具之lerna的全流程开发教程
Lerna
1 )文档
- Lerna 文档
- https://www.npmjs.com/package/lerna
- https://lerna.js.org [请直达这个链接]
- 使用 Lerna 帮助我们做包管理,并不复杂,中间常用的命令并不是很多
- 这里是命令直达:https://lerna.js.org/docs/api-reference/commands
2 )使用
- 现在我们开始使用 Lerna, 首先创建目录 lerna
- 安装并查看 lerna 版本 $
npx lerna -v这里没有安装,会自动安装 lerna - 目前lerna的版本是8.1.2
- 在 lerna 这个目录下执行 $
npx lerna init - 这时候,项目初始化完成了,就会多处一个 lerna.json 这个是lerna配置文件
- 现在基于 lerna 创建 a包 $
npx lerna create a一路回车 - 现在出现了 packages/a 包,里面有一系列配置
- 同workspace使用一致,在使用a的时候,把a加到分组中, 修改 a/package.json中的name
"name":"@somegroup/lerna-a", 并且把 a/lib/a.js 修改成 a/lib/index.js- 同步 a/package.json 中
"main": "lib/index.js",同时修改成ESM的形式"type":"module" - 修改 a/lib/index.js 的代码
'use strict';export default function() {return 'Hello from a'; } - 这样,a包就调试好了, 可以在 lerna/package.json 中看到
"workspaces": ["packages/*" ],- 这里的worksapces 使用了通配符*的方式
- 不同于 npm的workspace添加依赖的方式,lerna提供的方式是:$
npx lerna add -h - 注意,这里 The “add” command was removed by default in v7, and is no longer maintained.
- 所以,新提供的方式是: https://lerna.js.org/docs/legacy-package-management#replacing-your-usage-of-lerna-add
- 现在给a包添加chalk依赖: $
npm i chalk -w @somegroup/lerna-a注意这里a包的name变化了,所以安装方式也要如此 - 这里,a包就绪之后,就可以着手创建b包了,在创建的时候,可以看下一些辅助参数 $
npx lerna create -h - 可以看到常用的有
--access When using a scope, set publishConfig.access value [可选值: "public", "restricted"] [默认值: public] --bin Package has an executable. Customize with --bin <executableName> [默认值: <name>] --es-module Initialize a transpiled ES Module [布尔] - 这样,在创建b包的时候,就可以这样 $
npx lerna create b --access public回车,注意name配置为:@somegroup/lerna-b - 创建 cli 包的时候,就可以这样 $
npx lerna create cli --access public --bin --es-module回车,注意name配置为:@somegroup/lerna-cli - 对于b包
- 修改 b/lib/b.js 为 b/lib/index.js, 同时修改 b/package.json 中的
"main": "lib/index.js"和"type": "module"- 注意,这里和 cli包的区别在于生成b包的时候
--es-module没有添加,所以要手动添加这个"type": "module"
- 注意,这里和 cli包的区别在于生成b包的时候
- 修改 b/lib/index.js 的内容
'use strict';export default function () {return 'Hello from b'; }
- 修改 b/lib/b.js 为 b/lib/index.js, 同时修改 b/package.json 中的
- 对于 cli 包
-
修改 cli/package.json 中的 bin属性为:
"bin": { "lerna-cli": "bin/cli.js" }, main属性"main":"src/cli.js" -
修改 cli/bin/cli.js 中
#!/usr/bin/env node'use strict';import cli from '../src/cli.js';cli().parse(process.argv.slice(2)); -
修改 src/cli.js
import factory from 'yargs/yargs';export default function cli(cwd) {const parser = factory(null, cwd);parser.alias('h', 'help');parser.alias('v', 'version');parser.usage("$0","TODO: description",yargs => {yargs.options({// TODO: options});});return parser; }
-
- 回到最外层 lerna 目录,尝试连接下:
npx lerna link,发现报错- 报错内容为:The “link” command was removed by default in v7, and is no longer maintained.
- 解决方案:https://lerna.js.org/docs/legacy-package-management#replacing-your-usage-of-lerna-bootstraplerna-link
- 使用 $
npm i -ws这样,三个包都会在 lerna/node_modules/@somegroup 组中会被同步,这样可以替代之前lerna的link命令npm i -ws是更新所有 workspaces 中的依赖
- 现在在 lerna/package.json 中的最外层加上一个 cli 的 scripts
{"scripts": {"cli": "lerna-cli"} } - 执行 $
npm run cli - 这样,cli 包就可以直接在 lerna 目录下执行了, 验证
- $
npm run cli -v得到 10.2.3 这里得到的是 npm 的版本
- $
- 至此,基于 lerna 的脚手架的功能框架完成,目前并没有提供什么实质的功能
- 现在,要在 cli 包中使用a包和b包,在 lerna 目录下,执行 $
npm i @somegroup/lerna-a @somegroup/lerna-b -w packages/cli - 在 lerna/packages/cli/bin/cli.js 中使用
#!/usr/bin/env node'use strict';import cli from '../src/cli.js'; import a from '@somegroup/lerna-a'; import b from '@somegroup/lerna-b';console.log(a()); console.log(b());cli().parse(process.argv.slice(2)); - 执行 cli,$
npm run cli可以看到,打印出了a, b包中的方法提供的字符串
3 )测试
- 使用 lerna 添加测试脚本 $
npx lerna run test它会把 packages 目录中所有 test 脚本全部执行 - 如果要单独测试某个包,比如a包,修改
packages/a/__tests__目录下的 a.test.js'use strict';import a from '../lib/index.js'; import assert from 'assert';const { strict } = assert;assert.strictEqual(a(), 'Hello from a'); console.info('a tests passed'); - 这时候,在 packages/a 下执行 $
npm run test测试通过 - 同样,packages/* 下的所有包都可以这样修改后,执行测试用例
4 )发布
- 发布前的再次检查
- 每个包的版本都要注意同步检查,发布的时候,不要有错误
- 发布的配置检查,在 package.json 中
"publishConfig": { "access": "public" }都要有 - 提交代码到远程仓库后(必须)
- 所有事项准备完成,就可以执行发布的流程了,执行 $
npx lerna publish- 这里有步骤,可以选择下一个版本,填入必要信息或选项
- 选择之后,本地packages下包的每个版本都会帮忙升级,非常方便
5 )验证
- 发布完成后,可以本机全局安装我们的
@somegroup/lerna-cli工具了 - $
npm i -g @somegroup/lerna-cli@latest或者指定版本号 - 再执行 $
lerna-cli就可以运行我们的脚手架了 - 这样基于lerna开发的脚手架就已经完成了
相关文章:
前端架构: 脚手架包管理工具之lerna的全流程开发教程
Lerna 1 )文档 Lerna 文档 https://www.npmjs.com/package/lernahttps://lerna.js.org [请直达这个链接] 使用 Lerna 帮助我们做包管理,并不复杂,中间常用的命令并不是很多这里是命令直达:https://lerna.js.org/docs/api-referen…...
[安洵杯 2019]easy_serialize_php1
打开题目 题目源码: <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&q…...
【前端素材】推荐优质在线通用果蔬商城电商网页eStore平台模板(附源码)
一、需求分析 1、系统定义 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。它将不同种类的新鲜水果、蔬菜、干果、坚果等聚集在一起,为消费者提供方便、快捷的购物渠道。 2、功能需求 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。…...
开源软件的商业模式探析:开放与盈利的平衡
写在开头 开源软件的概念和应用已经成为了现代科技领域中的一个重要组成部分。然而,虽然开源软件的价值和影响力得到了广泛认可,但如何在开放的环境中找到商业盈利的平衡却是一个颇具挑战性的问题。本文将深入探讨开源软件的商业模式,从基本…...
使用全局事件总线实现任意组件间的通讯
本文以vue2中爷孙组件通讯为例,需求是点击孙组件的按钮,实现关闭爷组件的弹窗。 全局事件总线是通过Vue实例的事件系统来实现组件之间的通讯,可以方便地在任何组件中进行事件的触发和监听。 以下是使用全局事件总线实现爷孙组件通讯的步骤&a…...
文件基础和文件fd
文章目录 预备知识C语言的文件接口系统调用文件fd 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 预备知识 我们平时说文件就是说文件里…...
3dgs学习(二)—— 3d高斯与协方差矩阵及其几何意义
协方差矩阵与3d高斯 3d高斯与椭球与协方差矩阵 3d高斯,及3维空间内的正态分布。 通过一元正态分布的坐标系图像不难想象,3维空间中的正态分布点集中在一片椭球空间中,各方向长轴取决于各方向正态分布的方差。 而协方差矩阵通过计算多元之…...
ZStack Cube超融合入选IDC《中国超融合基础架构市场评估》报告
近日,IDC发布了《中国超融合基础架构市场评估,2023》。IDC针对中国超融合基础架构市场的发展现状展开了调研,明确了最终用户构建融合型云平台的痛点和难点,阐述了市场中各技术服务提供商的服务方案和优势,并对未来中国…...
每日一题——LeetCode1556.千位分隔符
方法一 个人方法: 把n转为字符串,逆序遍历n,把n的每个元素加入res,每三次加入.,最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…...
8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现
内容参考于:易道云信息技术研究院VIP课 上一个内容:通过逆向分析确定游戏明文接收数据过程 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:bcf7559184863febdcad819e48aa…...
Redis冲冲冲——事务支持,AOF和RDB持久化
目录 引出Redis事务支持,AOF和RDB持久化1、Redis的事务支持2、Redis的持久化 Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Redis冲冲冲——事务支持,AOF和RDB持久化 Redis事务支持,AOF和…...
路由菜单路径匹配方法
优化路由菜单路径匹配算法:实现获取整条线路的路径 引言 在前端开发中,路由菜单的路径匹配是一个常见的需求。我们经常需要根据给定的路径,找到对应的菜单项,并获取整条线路的路径。本文将介绍一个优化的路由菜单路径匹配算法&…...
设计模式浅析(九) ·模板方法模式
设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析,如果觉得对你有帮助,记得一键三连,谢谢各位观众老爷😁😁 模板方法模式 概念 模板方法模式(Template Method Pattern)在Java中是…...
无用工作、UBI与AI
有些隐晦和黑暗的事实无法陈述,因为任何的系统中“无用”的结局都是被无情的抛弃和淘汰,AI监督下的人类结局更是如此。 什么是无用工作? 无用无效工作通常指的是那些看似忙碌但实际上对社会或个人没有实质性贡献的工作。这类工作可能包括以下…...
【监控】grafana图表使用快速上手
目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中,我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…...
Django常用命令
一、新建一个新项目 django-admin startproject project_name二、新建一个app 在Django中的一个app代表一个功能模块。开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。 python manage.py startapp appa_name三、数据迁移(更新数据库) 编写好了Model后&#x…...
【center-loss 中心损失函数】 原理及程序解释(更新中)
文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码(center_loss.py)原理程序解释 如何梯度更新首先了解一下基本的梯度下降算法然后 前言 学习一下: 中心损失函数,用于用于深度人脸识别的特…...
什么是 HTTPS 证书?作用是什么?
HTTPS 证书,即超文本传输安全协议证书(Hypertext Transfer Protocol Secure),是网站安全的关键组成部分。它通过 SSL/TLS 加密协议,确保用户与网站之间的数据传输是加密和安全的。 什么是 HTTPS 证书? HT…...
为什么软考报名人数越来越多?
2020年软考报名人数404666人,广东省报考人数超过14万人。 ●2021年软考通信考试报名人数突破100万人,估计软考有90多万。 ●2022年软考通信考试共129万人,估计软考占了120多万人。 ●2023年软考具体报名人数没有公布,但工业和信…...
【投稿优惠|快速见刊】2024年图像,机器学习和人工智能国际会议(ICIMLAI 2024)
【投稿优惠|快速见刊】2024年图像,机器学习和人工智能国际会议(ICIMLAI 2024) 重要信息 会议官网:http://www.icimlai.com会议地址:深圳召开日期:2024.03.30截稿日期:2024.03.20 (先…...
Leaflet实战:从零构建交互式地图应用
1. 为什么选择Leaflet开发地图应用 第一次接触地图开发时,我面对市面上众多的地图库感到眼花缭乱。Google Maps API收费昂贵,OpenLayers学习曲线陡峭,直到发现了Leaflet这个宝藏库。它就像地图开发界的瑞士军刀——轻巧但功能齐全。最让我惊喜…...
detectron2 避坑安装手册:从环境配置到编译成功的全流程解析
1. 环境准备:从零搭建detectron2的避雷指南 第一次接触detectron2的朋友可能会被它的安装过程吓到——CUDA版本冲突、源码编译报错、依赖项缺失,随便一个坑都能让你折腾半天。我去年在部署一个工业质检项目时,曾经花了整整三天时间才把环境跑…...
PCB设计必看:贴片电容和插件电容怎么选?5个实际案例帮你避坑
PCB设计实战:贴片电容与插件电容的5个关键选型策略 在PCB设计领域,电容选型往往被新手工程师视为基础操作,但实际工程中这个"简单"决策可能直接影响产品稳定性、生产成本甚至市场竞争力。去年我们团队接手的一款工业控制器项目&…...
从Prompt失败到用户留存翻倍,生成式AI UX设计的5个反直觉真相,
第一章:Prompt失败不是终点,而是UX设计的起点 2026奇点智能技术大会(https://ml-summit.org) 当用户输入“帮我写一封辞职信,语气坚定但留有余地”,而模型返回一封格式混乱、逻辑断裂、甚至包含虚构公司名称的文本时,…...
07_NVIDIA Triton Java API:企业级高性能推理服务
NVIDIA Triton Java API:企业级高性能推理服务 摘要:NVIDIA Triton 是业界最先进的模型推理服务软件,支持多框架并发执行和动态批处理。本文深入解析 Triton 架构、Java API 的两种形态、TensorRT-LLM 后端集成,以及如何构建高性能…...
2026年OpenClaw(Clawdbot)腾讯云/本地零基础部署、配置大模型Coding Plan及使用教程【教程】
2026年OpenClaw(Clawdbot)腾讯云/本地零基础部署、配置大模型Coding Plan及使用教程【教程】。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,…...
springboot基于web的数学库组卷系统_k593i56u_cc066
前言 SpringBoot基于Web的数学库组卷系统是一款专为教育机构、学校及教师设计的在线智能组卷平台。该系统以SpringBoot框架为核心,结合Web前端技术,构建了一个高效、灵活、智能的数学试卷生成与管理系统。系统集成了丰富的数学题库资源,支持教…...
好用的企业知识库排名:9 款文档协作系统测评
本文将深入对比9款企业知识库工具:PingCode、亿方云、印象笔记(企业版)、石墨文档、看云、致远互联、语雀、蓝凌知识管理、巴别鸟 在数字化办公时代,企业的核心资产不再仅仅是产品,更是沉淀在团队中的知识与经验。然而…...
MOFA多组学因子分析:5分钟快速掌握多组学数据整合的终极指南
MOFA多组学因子分析:5分钟快速掌握多组学数据整合的终极指南 【免费下载链接】MOFA Multi-Omics Factor Analysis 项目地址: https://gitcode.com/gh_mirrors/mo/MOFA 你是否曾为如何整合转录组、蛋白质组、甲基化组等多组学数据而苦恼?…...
生成式AI应用安全上线前最后一步:SITS2026强制合规检查清单(含GDPR/等保2.0/内容审核三重校验模板)
第一章:生成式AI应用安全上线前最后一步:SITS2026强制合规检查清单(含GDPR/等保2.0/内容审核三重校验模板) 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Secure Integration & Trustworthiness Standa…...
