lerna初体验

本文详细介绍了Lerna工具的用途、工作流程及如何在项目中使用。从安装、初始化,到新建项目、发布、引入已有项目、添加依赖以及下架版本,逐一阐述了Lerna在多包仓库管理中的应用。此外,还提到了如何配置lerna.json文件以适应不同的发布模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lerna 是一个使用 git 和 npm 优化多包存储库管理工作流的工具。

 

lerna仓库结构

my-lerna-repo/
  package.json
  packages/
    package-1/
      package.json
    package-2/
      package.json

 

Lerna 中的两个主要命令是lerna bootstraplerna publish

bootstrap将把仓库中的依赖项链接在一起。publish将帮助发布任意的更新包。

 

一、安装

通过npm安装

npm i lerna -g

二、初始化

初始化的时候需在gitlub克隆空项目,在项目中执行初始化命令。

mkdir lernaDemo #创建目录文件夹,此目录应为git克隆下来的。
cd lernaDemo    #进入文件夹
lerna init      #初始化

初始化之后的目录文件应为

lernaDemo/
  packages/
  package.json
  lerna.json

以下为配置文件设置


属性名描述
version当前版本
npmClient指定运行命令的客户端(也可以根据每个命令单独指定)。设定为"yarn"则使用yarn运行。默认值是"npm"
command.publish.ignoreChanges通配符的数组,其中的值不会被 lerna 监测更改和发布。使用它可以防止因更改发布不必要的新版本,比如仅仅是修复 README.md 的错误。
command.publish.message执行发布版本更新时的自定义提交消息。更多细节见@lerna/version
command.publish.registry使用它来设置要发布的自定义注册 url,而非 npmjs.org,如果需要的话,您必须经过授权。
command.bootstrap.ignore运行lerna bootstrap指令时会忽视该字符串数组中的通配符匹配的文件。
command.bootstrap.npmClientArgs该字符串数组中的参数将在lerna bootstrap命令期间直接传递给npm install
command.bootstrap.scope该通配符的数组会在lerna bootstrap命令运行时限制影响的范围。
packages表示包位置的全局变量数组。

lerna.json中的packages配置是一个通配符列表,用于匹配包含了package.json的的目录。这就是 lerna 识别“叶子”包(和“根”package.json相对应,用于管理整个仓库的开发依赖和脚本)。

默认情况下,lerna 将包的列表初始化为["packages/*"],但是您也可以使用另一个目录,比如["modules/*"]["package1", "package2"]。定义的通配符是相对于lerna.json所在的目录的,该目录通常是存储库的更目录。唯一的限制是不能直接嵌套包的未知,但是该限制在“普通” npm 包中也是存在的。

 

 

三、新建项目打包发布

在packages中新建文件夹,通过npm init 来初始化项目,或者通过lerna create xxx来新建项目。

###### 通过npm init 初始化项目
mkdir demo1
cd demo1
npm init -y
###### 通过lerna create 创建项目
lerna create demo1
✗ git remote add origin git@gitlab.yourSite.com:gaopo/lerna-gp.git
​
#查看是否登录
✗ npm whoami
gp0320
​
#没有则登录 
npm login 
# 输入username password 
Logged in as gp0320 on https://registry.npmjs.org/. # succeed
​

 

设置完git和npm之后需要在packages同级的package.json中配置npm地址

{
  "name": "root",
  "private": true,
  "devDependencies": {
    "lerna": "^4.0.0"
  },
  "publishConfig": {
    "registry": "http://localhost:4873"
  }
}

修改完成git add .git commit -m "xx"之后输入lerna changed可以查看几个项目有改动。

wm0224@bogon mono % lerna changed
lerna notice cli v4.0.0
lerna info versioning independent
lerna info Looking for changed packages since demo1@1.0.2
demo1
demo2
lerna success found 2 packages ready to publish

执行lerna publish即可提交到git以及npm中,在这里提交有两种模式:

  • 固定模式:packages中的所有项目版本保持一致,同时设置所有项目的版本号。

  • 独立模式:在提交时可单独设置每个项目的版本。

lerna.json中的version设置为independent可以运行独立模式。

wm0224@bogon mono % lerna publish
lerna notice cli v4.0.0
lerna info versioning independent
lerna info Looking for changed packages since demo1@1.0.2
? Select a new version for demo1 (currently 1.0.2) (Use arrow keys)
❯ Patch (1.0.3)
  Minor (1.1.0)
  Major (2.0.0)
  Prepatch (1.0.3-alpha.0)
  Preminor (1.1.0-alpha.0)
  Premajor (2.0.0-alpha.0)
  Custom Prerelease
  Custom Version

通过lerna publish命令可以通过键盘上下键选择发布版本,也可以通过custom prerelease来进行手动输入版本号。

上传完成之后可以在git上看到提交信息,并且已经发布到npm私服中。

 

四、引入已有项目

已有项目通过 lerna import 文件夹目录 进行引入,然后通过lerna bootstrap进行以来安装。

 

 

五、添加项目依赖以及安装项目中依赖

在项目中可用lerna bootstrap来进行项目中需要的依赖安装。

lerna bootstrap
lerna notice cli v4.0.0
lerna info versioning independent
lerna info Bootstrapping 2 packages
lerna info Symlinking packages and binaries
lerna success Bootstrapped 2 packages

 

项目与项目之间的依赖可以用lerna add 指令进行添加。

lerna add demo1 --scope demo2 #在demo2中安装demo1依赖
lerna notice cli v4.0.0
lerna info versioning independent
lerna notice filter including "demo2"
lerna info filter [ 'demo2' ]
lerna info Adding demo1 in 1 package
lerna info Bootstrapping 2 packages
lerna info Symlinking packages and binaries
lerna success Bootstrapped 2 packages

 

六、下架版本

下架版本可以通过npm unpublish进行删除。

npm unpublish [<@scope>/]<pkg>@<version>

npm unpublish demo1 --force  #demo1后面可接@版本号删除具体版本
npm WARN using --force I sure hope you know what you are doing.
- demo1

 

 

参考:

lerna 中文网

Lerna 中文教程详解

使用verdaccio搭建npm私服

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值