乐趣区

关于lerna:lerna入门

本文首发于:https://www.kelen.cc/posts/lerna-study

lerna 是什么

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

为什么要应用它?

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

目前很多大型项目 Babel 等等。都会应用 lerna 来治理我的项目包。

lerna 作用总结

  • 解决 packages 之间依赖变动主动同步更新
  • git 提交扭转,主动公布,主动生成变更日志

lerna 实战

lerna 创立的我的项目目录构造如下

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

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 <[email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/*]]> */>","license":"MIT"
}

而后 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 中文文档

本文为原创,未经受权,禁止任何媒体或集体自媒体转载

退出移动版