lerna入门

2021-08-15

lerna是什么

lerna官网上描述到,lerna 是一种工具,针对git和npm管理多软件包代码仓库的工作流程进行优化。

为什么要使用它?

主要为了解决项目之间包(package)的依赖关系,比如大型项目里面,我们会把项目分成若干个模块包,各个模块包之间相互引用,这时候如果一个包(A)的版本做了变更,其他依赖的包都需要针对这个包(A)的版本进行更改,可想而知,工作量非常大而且还容易遗漏。

目前很多大型项目 Babel 等等。都会使用 lerna 来管理项目包。

lerna作用总结

  • 解决packages之间依赖变动自动同步更新
  • git提交改变,自动发布,自动生成变更日志

lerna实战

首先需要全局安装 lerna 命令行工具

npm install lerna -g

创建项目文件夹,并初始化 package.json

mkdir lerna-example && yarn init
// package.json
{
  "name": "lerna-example",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "version": "1.0.0",
  "main": "index.js",
  "author": "kelen <340443366@qq.com>",
  "license": "MIT"
}

通过命令 lerna init 就会在项目的根目录下初始化 lerna 项目,文件结构如下

lerna-repo/
  packages/
  package.json
  lerna.json

然后在 lerna.json 文件新增两个配置

{
  ...
  "useWorkspaces": true,
  "npmClient": "yarn"
}

现在我们来创建两个包,分别为 module-amodule-b

// module-a/index.js

const {
  add
} = require('module-b');

console.log(add(1, 2, 3))

// module-b/index.js

module.exports = {
  add(...args) {
    return args.reduce((prev, curr) => prev + curr, 0);
  }
}

模块之间依赖

上面的 module-a 引入了 module-badd 方法,我们怎么把依赖给关联起来呢?可以通过 lerna add 命令

lerna add module-b --scope=module=a

运行一下,报错了,错误信息如下

原因的意思是,lerna命令的scope值错误导致过滤对应包名后,找不到对应的packages,scope值应该为对应包名即package.json中的name

接下来我们为各自的包新建 package.json 文件,通过 yarn init 即可

// module-a/package.json
{
  "name": "module-a",
  "version": "1.0.0",
  "description": "module a",
  "main": "index.js",
  "author": "kelen",
  "license": "MIT"
}

这时候再执行 lerna add module-b --scope=module-a ,模块的依赖就关联起来了。

参考资料

lerna官网

lerna指令详解

lerna中文文档

本文为原创,未经授权,禁止任何媒体或个人自媒体转载
商业侵权必究,如需授权请联系340443366@qq.com
标签: git

评论

Loading...

最新评论

相关推荐

git工作流-forking
Forking工作流与 Feature branch 工作流不同的是,它为每个开发提供自己的仓库。一个本地仓库和一个公共...
husky实现git commit规范
开发中如何统一git commit规范,对项目的开发和维护以及问题的回溯都很有效果,接下来看看如何实现commit信息规...
github使用不同账号
在日常开发中,难免会遇到多个github账号使用同一个github服务的情况,在使用过一个github账号的同时,新增一...
scroll-top-icon