前言
这是一篇初次实践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
项目目录如下:
三、关联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目录:
备注2:使用lerna bootstrap命令可以统一导入node_modules。如果要添加依赖,可以在package.json配置文件中增加要导入的依赖,然后再执行lerna bootstrap自动导入。
五、提交代码到仓库:npm仓库和git仓库
1、提交代码到git仓库
windows环境下使用git bash进行提交
备注:忽略掉日志等不需要提交的文件,否则发布时会报错
要忽略的文件配置到.gitignore文件中
git add . // 提交本地暂存区
git commit -m "新建项目demo3" // 提交到本地仓库
git push origin master // 提交到远程仓库的分支
2、发布代码到npm仓库
// 发布项目中的所有子项目
lerna publish
发布效果如下图:
这里使用的不是第一次提交的情况,不过每次提交过程基本一致。发布成功时,npm账户的注册邮箱会受到发布成功的邮件。
备注:
如果发布时出现以下成功提示:
而你又确定有项目修改过,那么很可能是发布失败了,而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项目启动会报错:
这时需要在被依赖项目中添加eslint包依赖:
// 导入eslint
npm install --save-dev eslint
// 初始化eslint
./node_modules/.bin/eslint --init
初始化eslint时,会有几个选项,根据实际情况选择就好
初始化完成后,还需要在eslintrc配置文件中修改dev.es2021: true这一项为es6: true或者其他版本es,并把ecmaVersion: 12 改成10
总结
通过搭建lerna项目框架,对该工具有了比较肤浅的了解。要对一个工具有更深入的了解,还需要在日常开发中不断使用和不断探索。如果不用,那么我们永远都不可能了解这个框架或工具,实践很重要。
后记
相信大家能看出来,这个demo打算把组件作为子项目来管理,这个方式在其他博文中也有提到过。个人感觉这种方式很不错,而且是一种很好的发展方向。具体效果如何,还要看以后在开发中的应用。