美文网首页
项目代码管理的方式

项目代码管理的方式

作者: 追云人 | 来源:发表于2019-01-31 16:34 被阅读0次

    通常我们在项目不断的迭代更新中,代码体积会越来越大,我们会更具具体的业务或者功能或者某些方便复用的代码去拆分成独立的模块

    multirepo

    multirepo的方式就是把这种独立module分别放到不同的repository中去进行管理,即按模块划分为多个库。

    优点

    可以让每个module拥有自己的repository,按照自己的风格,工具和工作流程去开发维护module。

    缺点

    举个例子,现在需要维护两个package,分别是module-a和module-b,其中module-a依赖与module-b,开发module-a的过程中发现module-b有bug需要去修复,那么处理流程可能是这样:

    1. 切换到module-b项目并修改bug和版本号,发布
    2. 切换回module-a项目拉取最新的依赖
      这是只有两个package的情况,当package数量变多时可以想象其维护成本有多大,并且在不同的仓库中间你熟悉处理不同的代码和工具,维护成本较高。后期如果涉及人员交接,可能就会陷入到不知道哪里去找 repository 的境地。

    monorepo

    与multirepo相反monorepo是把所有相关的module放在一个repository里统一管理

    优点

    1. 统一的工作流
    2. 统一的仓库
    3. 方便管理版本和依赖
    4. 跨项目的操作和修改更容易

    缺点

    1. 代码体积巨大
    2. 需要依赖强大的代码管理工具

    什么是lerna

    引用官网的介绍:一个JavaScript多模块的管理工具。

    A tool for managing JavaScript projects with multiple packages

    使用lerna可以更好的帮助我们维护monorepo

    lerna基本使用

    step1
    安装全局依赖包

    npm install -g lerna
    

    step2
    初始化lerna项目

    git init lerna-demo
    cd lerna-demo
    lerna init
    

    初始化完成后目录结构如下

    │  lerna.json
    │  package.json
    |
    └─packages
    

    step3
    新建两个测试package:test-moduletest-module-utils,并且到各自目录中执行:

    npm init -y
    

    修改test-modulepackage.json并添加对test-module-utils的依赖

    "dependencies": {
      "test-module-utils": "^1.0.0"
    }
    

    step4
    回到主目录lerna-demo执行:

    lerna bootstrap
    

    leran会依次遍历package去安装依赖并且通过软链关联交叉依赖(test-module依赖test-module-utils),得到的目录如下:

    │  lerna.json
    │  package.json
    │
    └─packages
        ├─test-module
        │  │  package.json
        │  │
        │  └─node_modules
        │      └─test-module-utils
        │              package.json
        │
        └─test-module-utils
                package.json
    

    lerna 常用命令

    lerna init [--independent/-i]
    

    创建一个Lerna库或用现在的Lerna版本升级一个已存在的库

    1. 在 package.json文件的devDependencies字段里增加 lerna
    2. 生成lerna.json配置文件来存储版本号

    如果带上可选参数 --independent/-i lerna将使用independent模式

    Lerna 提供两类管理项目的模式: Fixed 和 Independent.

    1. Fixed(default)模式下,项目通过单一的版本进行控制。版本号放在项目根目录下的lerna.json文件的version这个字段。当你执行 lerna publish,如果有文件更新,它将发布新的版本
    2. Independent模式下,项目里的各个package独立维护自己的version,它将会忽略lerna.json中定义的version
    lerna bootstrap
    

    引导目前Lerna库的所有package,安装它们各自的依赖关系并连接任何相互交叉依赖的关系

    1. 为每个package npm install 安装dependencies
    2. 为packages 中存在相互依赖的做软链处理
    3. 为每个package执行其中的 npm prepublish 命令
    lerna run <script>
    

    依次遍历所有package,如果package中包含对应的script,则会执行对应的 npm run <script>

    lerna publish
    

    发布所有的package到npm上

    1. 本地打个tag(例如git tag v1.0.0)
    2. 自动更新依赖项版本号
    3. 把各个package发布到npm
    4. 把tag和相应的commit给push上去

    参考

    1. lerna入门指南
    2. REPO 风格之争:MONO VS MULTI
    3. monorepo 新浪潮 | introduce lerna
    4. lerna管理前端packages的最佳实践

    相关文章

      网友评论

          本文标题:项目代码管理的方式

          本文链接:https://www.haomeiwen.com/subject/wgxlsqtx.html