首页 体育世界正文

肌肉男,如安在一个工程下办理多个npm包?多包办理工具lerna了解一下,如皋

布景

最近有这么一个项目,这个项目需求依靠多个npm包,这些npm包有部分依靠是相同的(或许包与包之间有彼此联络),如下:

图1

如图1所示,这里有两个npm尸姐夜无声包:npm1和npm2,它们有公共的依靠base肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋2。这种情况下咱们该怎么处理本地代码呢?

假如npm1和npm2本地代码别离存入一个独自的库房,那么base2就需求copy一份,而且更新时两边都要坚持同步,别的假如还有更多的包,更多的公共依靠,那代码的保护就愈加麻烦了!

为了处理这个问题,咱们引进一个包处理东西——lerna。

运用介绍

1、大局装置lerna

npm in阑鬼坊stall lerna -g

安肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋装完结后,咱们看一下控制台有没有这个指令:

图2

图2极品小姨小说显现版别为3.16.4,阐明咱们现已装置成功了。

2、初始化咱们的项目库房,先创立一个lerna-repo目录,然后进入此目录运转下面的指令

lerna init //先选用默许形式,生成图3目录结构

图3

很明显lerna.json是lerna的装备文件(你会发现许多东西都有本地的装备文件以便用户能够依据自己的事务自定义才能),翻开这个json文件,如下图:

图4

咱们先重视这个packages特点,它是一个数组,每dnf令郎个元素代表能够发布的npm包的目录,比方图4中代表packages目录(初始化生成的)下一切的文件夹都是能够发版的npm包,别的也能够自定义npm包的目录,如下:

图5

图5中咱们自定义了一个目录——packag巴乐果es/plugins下一切的文件夹都是能够发版的npm包。

咱们再看一眼图3,一般贞德簿本lerna-repo目录下能够寄存各种依靠lib和进口entry,经过构建东西script tool将这些代码打包进packages目录中

3、生成一个npm包

lerna create <包名> 严树新[目录]

图6

图6中,咱们在packages/plugins目录下生成一个名为npm1的包,生成后肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋的目录结构如下:

图7

4、为包添加依靠

lerna add 包名 [--scope=特定的某个包] [--dev]

功用类似于npm install 包名,scope指定为某个包添加依靠,假如没有scope选项,就会为packages下一切的包添加这个依靠;d肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋ev选项代表依靠添加进devDependencies中。

5、检查整个工程目录下有哪些包

lerna list [-l]

图8

个人比较喜爱加一个-l先选项,信息会愈加刑家军全面一些。

6、为每个包装置依靠

lerna bootstrap [--scope=特定的某个包]

功用和npm install差不多,假如不加scope,lerna会把工程下的一切包的依靠都装置好!

7、删去包下面的node_modules

上面的指令装置依靠会在每个包目录下生成node_modules,下面的指令便是将node_modules删去

lerna clean

8、导入外部的包(这个指令比较有意思)

lerna impo李妍静rt 外部包的方位 --dest=工程下双沟紫陶坊的方位

图9

图9中,koa是一个开源的包,咱们用git下载到本地,然后用上面的指令导入到packages/plugins目录下,不只代码会被导入,连git的操作前史也会被一同导入,所以它的运用场景也就十分的清晰,便是为了将现已存在的npm包代码库迁移到 lerna 库房中。

9、运转包的script指令

lerna run 指令 [--scope=特定的某个包]

和npm run [指令] 没什么差异,假如没有scope选项,lerna会运转每个包的script指令,如下:

图10

图10中运转了两个包下的test指令。

10、检查diff

lerna diff

和git diff 根本没差异,会显现工程下一切的修正

11、检查能够发布的包

lerna changed

图11

图11中显现有两个包能够发布,当穿越之农家绣女杨棉棉你发布完结后再运转这个指令,赤色区域就会显现No changed packages found。

12、发布

lerna publish [--dist-tag=tag名]

图12

如图12所示,控制台会让用户选择要发版的版别号(最终一个能够自定义)

dist-tag选项能够发版一个其他分支的包,在测验时比较有用!

图13

测验时能够发布一个beta版(--dist-tag=beta),经过手动@版别号装置(npm install 默许装置latest)!

13、形式

lerna init初始化默许运用的是fixeperkyd形式,回看图4中有个version选项,lerna在它肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋的装备文件中记载了当时工程下一切包中最大的版别号,每个包发版时都是在这个版别号的基础上添加,发布完结,这个vabs074ersion艺人张晞也会更新到最大版别号!

比方 npm1 版别号是 0.0.1,npm2 版别号是 0.0.3lcu是什么意思,lerna装备文件的version是0.0.3,你现在修正npm1,预备发布新包,你以为新包的版别号可能是0.0.2?错!此形式下,lerna会以装备文件的version向上递加:

  • 假如添加patch,npm1发包后版别号是0.0.4,npm2的版别号不变;
  • 假如添加major或许minor,packages下的一切包都会一致添加,npm1和npm2都会一致变成0.1.0或许1.0.0;

babel和vue便是选用这种形式的。

另一种形式是independent

l肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋erna init --inde肌肉男,如安在一个工程下处理多个npm包?多包处理东西lerna了解一下,如皋pendent

这万奇卡下载种形式下lerna就不会帮助记载版别号了,各包依照自己的规矩递加。

总结

此篇文章首要介绍了lerna怎么运用,有时看文档比较不流畅不容小四川马戈易懂,期望这篇文章能让黼黻读者更清楚的知道lerna!篇幅有限,还有许多的指令和装备没有讲到,在运用时假如有疑问能够在指令后边加一个--help选项,就会有运用介绍!啪啪啪舒畅吗

喜爱我的文章就重视我吧,后续会更多干货输出,让咱们一同学习,一起生长!

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。