2021-06-26 lerna管理项目

monorepo

  1. 管理代码的一个方式, 指的是在一个仓库里管理多个模块/包 package

  2. monorepo最主要的好处就是统一的工作流和代码共享

  3. Lerna是管理多个npm模块的工具 优化维护多包的工作流, 解决多个包之间相互依赖, 且发布需要手动维护多个包的问题

  4. packages = (packageA + packageB + packageC) 一个仓库下有多个包

  5. MultiRepo多仓管理方式

    • 优点:
      • 各个模块管理自由度比较高, 可自行选择构建工具, 依赖管理, 单元测试等配套设施
      • 各模块仓库体积一般不会太大
    • 缺点:
      • 仓库分散不太好找, 很多的时候, 分支管理混乱
      • 版本更新频繁, 如果公共模块发生了变化的时候, 需要对所有的模块进行依赖的更新
      • CHANGELOG梳理比较折腾, 无法很好地关联各个模块的变动联系, 基本靠口相传
  6. MonoRepo的方法

    • 缺点:
      • 统一构建工具, 对构建工具提出了更高的要求, 要构建各种相关的模块
      • 仓库体积变大
    • 优点:
      • 一个仓库维护多个模块, 不用到处寻找仓库
      • 方便版本管理和依赖管理, 模块之间的引用, 调试都比较方便, 配合相应工具, 都可以使用一个命令搞定
      • 方便统一生成CHANGELOG 配合提取规范, 可以在发布的时候自动生成
  7. 使用mongoRepo

    • npm install lerna -g

    • lerna init

    • package.json

      • private: true 表示是一个私有的项目, 不会发布到npm上
      • workspaces 表示是一个yarn workspace的项目, 允许我们使用monoRepo的形式来管理项目
    • 在安装node_modules的时候, 不会安装到每一个子项目的node_modules里面, 而是直接安装到根路径下面, 这样每一个子项目都可以读取到根项目里面的node_modules

    • 整个项目只有根路径下面有一份yarn.lock文件, 子项目会被link到node_modules里面, 这样就允许我们可以直接使用import导入对应的项目

    • yarn.lock文件是自动生成的, 完全由yarn来处理, 锁定安装的每一个依赖的版本, 这样可以确保不会获得不良的依赖

    • lerna创建子项目

      • lerna create create-react-app3
      • lerna create react-script3
      • lerna create cra-template3
      // cra-template3.js
      const reactScripts = require("react-scripts2");
      
      function craTemplate2() {
          console.log(reactScripts());
          console.log("cra-template-2");
      }
      
      craTemplate2();
      
      module.exports = craTemplate2;
      
      // react-scripts2.js
      function reactScripts2() {
          // console.log('reactScripts2');
          return "reactScripts2";
      }
      module.exports = reactScripts2;
      
  8. yarn管理项目

    • yarn workspaces info查看工作空间
    • yarn add chalk cross-spawn [email protected] --ignore-workspace-root-check 忽略工作空间根检查
    • 给公共空间安装依赖: yarn workspace create-react-app2 add commander

你可能感兴趣的:(2021-06-26 lerna管理项目)