(转载)lerna 学习

2020-04-27  本文已影响0人  7b7d23d16ab5

lerna学习(二)

安装

    lerna的安装类似于webpack,需要全局安装作为一个命令来使用,可以选择使用npx直接使用,不过为了方便,还是全局安装方便一些。

yarn global add lerna

初始化

mkdir myLerna
cd myLerna
lerna init --independent

    lerna的初始化分为fix模式以及independent模式两种,默认是fix模式,或者叫做锁定模式,项目内所有的package共用版本号。不过我认为这种情况其实很少,大部分人应该都是使用独立模式,每个package拥有自己的版本号。

创建package

cd packages
mkdir package-1
cd package-1
yarn init -y
cd ..
mkdir package-2
cd package-2
yarn init -y

    这里要注意,如果你没有创建任何package,你是不能使用lerna add命令安装依赖包的,因为默认lerna会为每个package安装依赖。

安装各种依赖

    在开发之前,肯定是需要先安装各种eslint、prettier、commit-lint等等规范化库的,我们为啥要把一堆package放到一个仓库?其中一个原因不就是为了直接复用一套规范文件么。

    所以各种lint文件肯定是安装到项目全局的,这时如果使用lerna的安装命令:

lerna add eslint --dev

    就会发现一个问题,每个package都被单独安装了eslint,这明显是不合适的,既然是同一个项目,安装多次同一个模块算个什么事?

    然后我们发现,lerna有提到如果你想只安装一次,那么可以把这些依赖写到每个package的package.json中,然后回到根目录运行:

lerna bootstrap --hoist

     bootstrap是learna一键为所有package安装依赖的命令,如果加上了--hoist参数,那么就是告诉lerna,把所有依赖全部安装到根目录中,然后分别在各自的文件夹中创建软连接指向对应的模块实际路径。

    从解决问题的眼光来看,确实解决了重复安装的问题,不过所有模块都装到根目录混杂在一起,这让强迫症心里很不舒服,我们希望的其实是只有lint这些公共库提取出来,其他的他们自己的依赖放到他们自己的文件夹中。

    在参考了[Babel](<https://github.com/babel/babel>)仓库的做法后,明白了。因为node自身在查找模块的时候有向父级目录查询的操作,所以其实软连接什么的并不需要,甚至都不需要lerna,我们直接

yarn add -D eslint

    这样便直接将eslint安装到了根目录中,由于层级高,所以子目录都会受到lint规则的约束。同样,为此安装好husky等等基本库,完成仓库的初始化。(可以参考我的另一篇[文章](<https://www.notion.so/aj0k3r/57b80f3f75b741e3a54546c20ae5e8e7>))

安装依赖包

    安装依赖包有很多种方式,虽然可以进入对应的文件夹中直接使用yarn安装,不过为了项目统一,还是推荐使用lerna的命令来安装依赖

值得注意的命令

第二篇结束......

参考链接:

上一篇下一篇

猜你喜欢

热点阅读