Lerna 教程

  • Lerna 教程
    • 一、什么是 lerna?
    • 二、环境搭建
    • 三、使用
      • 初始化项目
      • 创建项目包
      • lerna bootstrap
    • 四、发布
      • 登录 npm
      • 发布
      • err: 此存储库中没有提交
      • err: 项目中存在未提交的代码
      • err: 403 没有权限\增加许可证
    • 四、私有包
      • 1、创建 `npm` 组织和 `git` 组织。
      • 2、修改项目仓库名称

Lerna 教程

一、什么是 lerna?

多包管理工具,方便我们在一个项目中管理多个 npm 包,能够在发包时统一每个包的版本号。

优雅的解决大型多包项目中每发一次包都要手动修改各个包的版本号并单独发布的烦恼。

二、环境搭建

打开终端安装 lerna 环境

npm i lerna -goryarn global add lerna

安装完成后执行 lerna -v 看下是否能够正确的输出 lerna 的版本号。

三、使用

初始化项目

找一个空文件夹执行 lerna init 初始化项目。

初始化后的目录结构如下所示

.
├── lerna.json // lerna 的相关配置
├── package.json
└── packages // 约定了该文件夹下存放多个 `npm` 包。|

创建项目包

通过命令行创建项目

lerna create one

在终端输入完 pkg.json 的内容时,可以在 packages 文件夹下看到 one 项目已经被创建好了。

那么现在继续执行 lerna create two 创建第二个包出来。

目录结构如下:

.
├── lerna.json
├── package.json
└── packages├── one│   ├── __tests__│   ├── lib│   ├── README.md│   └── package.json└── two├── __tests__├── lib├── README.md└── package.json

lerna bootstrap

每个包都会有单独的依赖需要安装,现在我们在 one 包下增加个依赖。

packages/one/package.json

{..."dependencies": {"classnames": "^2.2.6"},...
}

在终端执行

lerna bootstrap

会在包中帮你安装完这些依赖。

四、发布

登录 npm

npm login

如果没有 npm 账号,可以到 npm 官网 注册一个。

发布

现在我们把 packages 下的两个包发布到 npm 上。执行:

lerna publishinfo cli using local version of lerna
lerna notice cli v4.0.0
lerna info current version 0.0.0
lerna ERR! ENOCOMMIT No commits in this repository. Please commit something before using version.

err: 此存储库中没有提交

这里报错了,来看下错误的信息:

此存储库中没有提交。请在使用版本之前提交一些内容。

说明,要想在 npm 上发布包,需要有 git 仓库。

那么可以创建个 git 仓库,先将代码提交。

为了防止提交 node_modules 的文件夹,在根目录中增加 .gitignore 文件。

/node_modules
/packages/*/lib
/packages/*/dist
/packages/*/node_modules

给每个包的 package.json 增加 git 地址:

/packages/one/package.json:

{..."repository": {"type": "git","url": "https://github.com/hang1017/lernaStudy"},...
}

err: 项目中存在未提交的代码

现在再执行下 lerna publish

lerna ERR! EUNCOMMIT Working tree has uncommitted changes, please commit or remove the following changes before continuing:
lerna ERR! EUNCOMMIT  M packages/one/package.json
lerna ERR! EUNCOMMIT  M packages/two/package.json

这个报错信息说明,我们的项目还有未提交到 git 上的内容,这里我们把上面新增的代码提交到 git 上去。

说明每次发包前都要将代码提交干净再去发包。

再次执行 lerna publish

lerna publish? Select a new version (currently 0.0.0) (Use arrow keys)
❯ Patch (0.0.1)------------------小版本Minor (0.1.0)------------------中版本Major (1.0.0)------------------大版本Prepatch (0.0.1-alpha.0)Preminor (0.1.0-alpha.0)Premajor (1.0.0-alpha.0)Custom PrereleaseCustom Version

那么选择 Patch 发布一个小版本的包。

又出现报错信息:

lerna notice Skipping all user and access validation due to third-party registry
lerna notice Make sure youre authenticated properly ¯\_(ツ)_/¯
lerna WARN ENOLICENSE Packages one and two are missing a license.
lerna WARN ENOLICENSE One way to fix this is to add a LICENSE.md file to the root of this repository.
lerna WARN ENOLICENSE See https://choosealicense.com for additional guidance.
lerna http fetch PUT 403 http://registry.npmjs.org/one 615ms
lerna ERR! E403 You do not have permission to publish "one". Are you logged in as the correct user?

err: 403 没有权限\增加许可证

因为 npm 有一百多万的包,所以我们使用 one || two 这样简单名字的包会因为和别的包重名导致没有该包的权限而无法发布。而有些私有包,你在 npm 上无法找到,但也确确实实存在。因此

1、需要修改下 one || two 两个包的名称。

2、在两个包的 package.json 增加 "license": "MIT"

3、在根目录增加 LICENSE 的文件,内容如下:

要修改第三行的名称和邮箱

The MIT License (MIT)Copyright (c) 2017-present yournane (*********@qq.com)Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

至此我们再次执行 lerna publish 命令,试试能不能成功发布。

在我本地还是会出现 403 的权限问题。

不懂有没有社会好心人士能够帮忙看看这个问题。

但是为了能够顺利发包,我们可以建立一个私有组织,以私有组织的名义来发包。

四、私有包

1、创建 npm 组织和 git 组织。

先创建一个 npm 组织,以 dlijs 为例(小伙伴换一个名称,这个名称已经被我用了)。

并且在 git 上创建一个 dlijs 的组织。并且把项目迁移到这个组织下。

2、修改项目仓库名称

将两个包的 package.json 修改成 @dlijs/one@dlijs/two

好了那么接下来就可以尝试发包了。

在笔者的测试下,是可以顺利的发包了。在 npm 上就能够搜索到 @dlijs/one@dlijs/two 这两个包了。

编写不易,点个赞呀~

Lerna 入门级教程相关推荐

  1. JEECG_3.7开发环境搭建与代码生成器入门级教程-张代浩-专题视频课程

    JEECG_3.7开发环境搭建与代码生成器入门级教程-3088人已学习 课程介绍         针对入门级同学,清晰讲解JEECG开发平台本地环境搭建步骤,针对jeecg的代码生成器做专题使用讲解, ...

  2. Xtract or Ucfyber的最条理的整理入门级教程

    Xtract or Ucfyber的最条理的整理入门级教程 1 示例简介 2 使用步骤: 2.1 打开Xtract,界面如下:选择 `file-new project` 新建工程 2.2 弹出新建工程 ...

  3. comsol函数的使用(入门级教程)

    comsol函数的使用(入门级教程) 情景一 材料密度rho是温度T的函数 假如材料密度

  4. Unity 之 ShaderGraph 实现自发光和能量护盾效果入门级教程

    Unity 之 ShaderGraph 实现自发光和能量护盾效果入门级教程 前言 一,效果展示 二,原理介绍 三,发光效果 2.1 准备工作 2.2 开始制作 2.3 实际使用 四,护盾效果 2.1 ...

  5. Unity 之 ShaderGraph 实现旋涡(传送门)效果入门级教程

    Unity 之 ShaderGraph 实现旋涡[传送门]效果入门级教程 一,最终效果展示 二,创建PBRGraph 三,实现原理介绍 四,完整效果实现 五,应用到场景中 若你的工程还没有进行基础配置 ...

  6. Unity 之 ShaderGraph 实现全息效果入门级教程

    Unity 之 ShaderGraph 实现全息效果入门级教程 前言 一,效果展示 二,原理介绍 三,制作步骤 四,使用示例 五,资源分享 前言 若你的工程还没有进行基础配置,请查看我的博文Unity ...

  7. PiMuseum-游戏开发入门级教程-中国象棋-Chapter-3

    PiMuseum-游戏开发入门级教程-中国象棋-Chapter-3 导语 游戏引擎 游戏引擎概念及其组件 光影效果 动画组件 物理系统 渲染系统 通信模块 初始化游戏引擎 选择游戏引擎 接入游戏引擎 ...

  8. Ubuntu22.04.1安装ROS2入门级教程(ros-humble)

    Ubuntu22.04.1安装ROS2入门级教程(ros-humble) 文章目录 Ubuntu22.04.1安装ROS2入门级教程(ros-humble) 一键安装ROS(五星推荐⭐⭐⭐⭐⭐) 前言 ...

  9. SEM百度推广初学者入门级教程

    为什么80%的码农都做不了架构师?>>>    SEM百度推广初学者入门级教程 如果你是一个纯纯的新手,正要开始学习百度推广,但无从下手,那么这篇教程正是为你准备的. 首先,要认识搜 ...

最新文章

  1. java 四则运算 栈的实现
  2. [RabbitMQ]常用命令
  3. HotSpot虚拟机在Java堆中对对象的管理
  4. 太赞了!这款神器一定要有!在Touch Bar上显示Dock图标工具
  5. 微信打开页面底部显示“原页面已由QQ浏览器云转码”解决办法
  6. [转]ASP.NET页面HEAD区动态设置全攻略
  7. 华为云全球首发企业级AI应用开发套件ModelArts Pro,加速行业AI落地
  8. tkinter事件机制
  9. Windows上的svn仓库迁移(visualSVN)
  10. 1091. Acute Stroke (30)-PAT甲级真题(广度优先搜索)
  11. linux刷新profile文件,Linux下修改.bash_profile 文件改变PATH变量的值
  12. 蚂蚁森林用户须知_蚂蚁森林刷能量漏洞(轻松读懂规则)
  13. 服务器装系统不识别硬盘分区,u盘装系统时找不到硬盘分区解决方法
  14. 线性回归、逻辑回归学习笔记
  15. Java 控制反转和依赖注入模式【翻译】【整理】
  16. 计算KS值的标准代码
  17. form表单与ajax的两种提交方式
  18. 耀华仪表A9数据解析(C#)
  19. VSCode快捷键配置复制一行
  20. asp+excel通用成绩查询系统 v6.8 工资查询物业费水电费查询通用哦

热门文章

  1. Ghidra Java API报NoClassDefFoundError的解决方法
  2. Python | 用Python画个美队盾牌送给你
  3. 前台中文传参后台乱码解决方案
  4. 鱼那么信任水,水却煮了鱼
  5. 基于tesseract_ocr实现图片中汉字辨识
  6. Visual Studio中C++部分的官方文档链接【微软(Microsoft)所有产品的官方文档链接】
  7. turtle(海龟)知识点整理
  8. 如何在Mac上为 Apple ID 设置双重认证?
  9. 20190916CF训练
  10. 鸿蒙HarmonyOS应用开发系列 | 解读鸿蒙源码