学习用lerna管理你的项目

1,896 阅读3分钟

学习用lerna管理你的项目

八月更文第七弹, 开始啦! 🍦

这是我参与8月更文挑战的第7天,说到Lerna很多没接触过的同学可能会想这是什么东西,其实抛开神秘的面纱,它就是一种包管理工具啦~
这里借用官方的描述进行说明,在我们的工作中将大型代码仓库分割成多个独立版本化的软件包package对于代码共享来说非常有用。但是,如果某些更改跨越了多个代码仓库的话将变得很麻烦并且难以跟踪,并且跨越多个代码仓库的测试将迅速变得非常复杂。

为了解决这些(以及许多其它)问题,某些项目会将 代码仓库分割成多个软件包package,并将每个软件包存放到独立的代码仓库中。但是,例如 Babel、 React、Angular、Ember、Meteor、Jest 等项目以及许多其他项目则是在 一个代码仓库中包含了多个软件包package并进行开发。
Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化。
下面开始介绍Learn的使用:

起步

Lerna 的官方地址为www.lernajs.cn/
Lerna 的Git仓库地址为github.com/lerna/lerna

命令介绍

Lerna有很多种命令,这里对部分进行举例:

lerna init

初始化项目,创建一个新的lerna库或者是更新lerna版本

  • 修改package.json中lerna版本
  • 创建lerna.json

lerna bootstrap

自动构建项目,bootstrap作了如下工作

  • 为每个包安装依赖
  • 链接相互依赖的库到具体的目录
  • 执行 npm run prepublish
  • 执行 npm run prepare

可以通过 -- 后添加选项, 设置npm cient的参数

lerna bootstrap -- --production --no-optional

也可以在lerna.json中配置

{
  ...
  "npmClient": "yarn",
  "npmClientArgs": ["--production", "--no-optional"]
}

lerna ls

列举当前lerna包含的所有项目包

lerna clean

删除各个包下的node_modules

lerna add

给所有包安装依赖(类似npm install)

lerna publish

发布新的版本

开始

初始化

lerna的操作是包含git和npm的,因此项目需要从git上克隆下来,目录如下,仅有一个项目

vue-module-federation-plugin

对此项目执行learn init 操作得到如下结构

packages
 -|vue-module-federation-plugin
lerna.json
package.json

提交

创建完成后测试lerna的提交,在publish前,优先对更改项进行commit
提交版本介绍:

  • MAJOR
    MAJOR表示当前APR的主版本号,它的变化通常意味着APR的巨大的变化,比如体系结构的重新设计,API的重新设计等等,而且这种变化通常会导致APR版本的向前不兼容。
  • MINOR MINOR称之为APR的次版本号,它通常只反映了一些较大的更改,比如APR的API的增加等等,但是这些更改并不影响与旧版本源代码和二进制代码之间的兼容性。
  • PATCH
    PATCH通常称之为补丁版本,通常情况下如果只是对APR函数的修改而不影响API接口的话都会导致PATCH的变化。

项目包创建

在lerna的packages下我们来创建一个新的vue项目包css-store-house ,生成如图所示的目录,这时候我们的项目下就已经有了2个项目包

image.png

关联运行

通过lerna我们可以直接对packages的项目进行运行,设置packages如下:

{
  "name": "root",
  "private": true,
  "scripts": {
    "dev:css-store-house": "lerna run serve --parallel --scope=css-store-house",
    "build:css-store-house": "lerna run build --parallel --scope=css-store-house"
  },
  "devDependencies": {
    "lerna": "^4.0.0"
  }
}

执行运行命令npm run dev:css-store-house即可正常运行packages下的css-store-house项目

image.png

示例项目地址

gitee.com/koukaile/sa…

总结

lerna的简单学习介绍就到这里,其他功能可以在自己的项目中尝试哦~
本文到此结束,希望对你有帮助 😉