安装

    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,我们直接