初次实践lerna项目管理工具

2,122 阅读5分钟

前言

这是一篇初次实践lerna过程的笔记,记录了实践过程中遇到的坑,以及填坑方法。

要开始lerna的实践,需要先做好准备工作。

1、软件准备:需要安装nodejs和git

nodejs版本:node: '14.15.3'

git版本:git version 2.29.2.windows.3

2、账号准备:这里直接使用官网账号,需要在npm官网注册账号,还要在github上注册用户并新建git仓库。如果业务需要,也可以自己搭建私库npm和gitlab等,作者偷懒了,不再赘述搭建方式。

3、安装vue-cli3:也可以使用其他前端框架,比如react、next等。本文选择使用vue-cli来进行实践。

摘要

使用lerna实现项目管理,初步搭建起项目框架

正文

一、安装lerna

lerna版本:4.0.0

安装命令如下:

npm install --global lerna

二、初始化项目:lerna-demo3

默认lerna有两种管理模式, 固定模式和独立模式

固定模式

固定模式,通过lerna.json的版本进行版本管理。当你执行lerna publish命令时, 如果距离上次发布只修改了一个模块,将会更新对应模块的版本到新的版本号,然后你可以只发布修改的库。 这种模式也是Babel使用的方式。如果你希望所有的版本一起变更, 可以更新minor版本号,这样会导致所有的模块都更新版本。

独立模式

独立模式,init的时候需要设置选项 --independent. 独立模式允许管理者对每个库单独改变版本号,每次发布的时候,你需要为每个改动的库指定版本号。这种情况下, lerna.json的版本号不会变化了。文章中为independent。

这里使用independent模式。

// 新建项目文件夹
mkdir lerna-demo2
// 进入文件夹
cd lerna-demo2
// 初始化项目
lerna init --independent

项目目录如下:

image.png

三、关联git仓库

windows环境下在git bash中执行

// 添加git仓库地址
git remote add origin https://github.com/419572718/lerna-demo3.git

四、新建子项目

子项目必须放在packages文件夹下。这里我是用了三种方式新建子项目

1、npm init

// 新建子项目文件夹
mkdir n-input
// 进入文件夹
cd n-input
// 初始化项目
npm init

注意项目名称不要和已有的npm项目冲突

2、vue-cli的vue create命令

// 新建子项目project-a
vue create project-a
// 新建子项目liuy-input
vue create liuy-input

3、lerna create

// 新建子项目j-input
lerna create j-input

备注:其实还可以使用lerna import命令导入git仓库种的项目,或者直接复制粘贴到packages文件夹下。

创建项目后的packages目录:

image.png

备注2:使用lerna bootstrap命令可以统一导入node_modules。如果要添加依赖,可以在package.json配置文件中增加要导入的依赖,然后再执行lerna bootstrap自动导入。

五、提交代码到仓库:npm仓库和git仓库

1、提交代码到git仓库

windows环境下使用git bash进行提交

备注:忽略掉日志等不需要提交的文件,否则发布时会报错

image.png 要忽略的文件配置到.gitignore文件中

image.png

git add .  // 提交本地暂存区
git commit -m "新建项目demo3"  // 提交到本地仓库
git push origin master  // 提交到远程仓库的分支

2、发布代码到npm仓库

// 发布项目中的所有子项目
lerna publish

发布效果如下图:

image.png 这里使用的不是第一次提交的情况,不过每次提交过程基本一致。发布成功时,npm账户的注册邮箱会受到发布成功的邮件。

备注:

如果发布时出现以下成功提示:

image.png

而你又确定有项目修改过,那么很可能是发布失败了,而lerna没有提示出来。这时需要你进入子项目的目录,通过npm publish命令手动提交,大多数情况下就能看到发布时的错误信息了。当然,也可能不报错直接发布成功,为什么会出现这种情况,我也不清楚,这里只做记录。

六、添加项目依赖

必须是已发布的项目才能正常添加,否则项目启动时会报错This dependency was not found:。依赖只要添加成功一次,后面就可以直接修改,修改效果会直接反应在引入依赖的项目中,不需要提交修改到仓库。

以项目liuy-input导入project-a为例,lerna命令如下:

// 把liuy-input导入project-a
lerna add liuy-input --scope=project-a

这个liuy-input项目,可以作为组件引入到项目project-a中使用,从而实现组件的版本依赖管理。

七、项目修改和提交修改

修改后的提交和新建后提交流程相同,这里就不再多做赘述。

八、问题记录

1、npm init和lerna create命令新建的子项目,导入vue项目后,vue项目启动会报错:

image.png 这时需要在被依赖项目中添加eslint包依赖:

// 导入eslint
npm install --save-dev eslint
// 初始化eslint
./node_modules/.bin/eslint --init

初始化eslint时,会有几个选项,根据实际情况选择就好 image.png 初始化完成后,还需要在eslintrc配置文件中修改dev.es2021: true这一项为es6: true或者其他版本es,并把ecmaVersion: 12 改成10

总结

通过搭建lerna项目框架,对该工具有了比较肤浅的了解。要对一个工具有更深入的了解,还需要在日常开发中不断使用和不断探索。如果不用,那么我们永远都不可能了解这个框架或工具,实践很重要。

后记

相信大家能看出来,这个demo打算把组件作为子项目来管理,这个方式在其他博文中也有提到过。个人感觉这种方式很不错,而且是一种很好的发展方向。具体效果如何,还要看以后在开发中的应用。