lerna

作者: 白白白大爷_SimonLau | 来源:发表于2022-05-18 17:05 被阅读0次

    关键字:lerna yarn workspace

    lerna

    lerna init

    将一个仓库初始化为 lerna 仓库(默认固定模式)

    lerna create 「package」

    创建一个 package 到项目工程的 packages 下。

    lerna add 「module」

    • 为每个 package 都安装指定依赖:
      lerna add react
    
    • 为指定的 package 安装特定依赖:
    lerna add react-dom packages/package1 
    // or 
    lerna add react-dom --scope=package1
    
    • 添加依赖到根目录 node_modules 中:
    npm install typescript -D
    
    • package 之间的相互依赖(会在 package/package.json 下添加该依赖):
    lerna add package2 --scope package1 
    // or 
    lerna add package2 packages/package1
    

    lerna publish

    用于 npm 包版本发布

    lerna bootstrap

    用于将 packages 链接在一起(前提是相互依赖的库),并安装 package 下的依赖到 package/node_modules。

    • 注意,它不会安装根目录 package.json 的依赖,如果需要安装根目录依赖,请使用 npm install。

    • 参数:
      --hoist:依赖提升,把每个 package 下的依赖包都提升到工程根目录(删除包下的 node_modules,将依赖安装在根目录,但依赖注册不会在 package/package.json 内删除,也不会在 root/package.json 内添加此依赖)

    lerna clean

    删除各个包下的 node_modules(不会删除根目录 node_modules)。

    lerna run 「script」

    • 运行每个包下面的 script(如果某个包没有此 script,将会报错)
    lerna run test
    
    • 运行某个包下面的 script
    lerna run test --scope package1
    

    lerna link

    链接互相引用的库,当 pakcage/package.json 内明确了 packages 下的包时,才会将相关包链接到 package/node_modules 中。

    lerna info

    查看 lerna 及运行环境的信息。

    Lerna 最佳实践

    lerna + yarm workspace 结合的 Monorepo 方案

    • yarn 处理依赖安装工作
    • lerna 处理发布流程

    yarn workspace 管理工程

    初始化工程时,需另做配置如下:

    • 1, 在 lerna.json 中声明使用 yarn workspace 进行依赖管理:
    {
      ...
      "npmClient": "yarn",
      "useWorkspaces": true
    }
    
    • 2, 在 root/package.json 下必需包含 workspaces 数组,与 lerna.json 下的 packages 保持一致:
    {
      "private": true, // 工作空间不需要发布
      ...
      "workspaces": ["packages/*"]
    }
    

    yarn workspace 管理命令

    • 处理工程下指定的包模块时使用:yarn workspace;
    • 处理工程根目录全局或所有包模块时使用:yarn workspaces。

    yarn install

    代替 npm install + lerna bootstrap 安装工程依赖。
    它与 lerna bootstarp 不同的是:

    • yarn install 会将 package 下的依赖统一安装到根目录之下。这有利于提升依赖的安装效率和不同 package 间的版本复用(有些包是需要私有依赖的,而私有依赖会被多个包安装多次,而提升依赖可以解决这一问题)。
    • yarn install 会自动帮助解决安装(包括根目录下的安装)和 packages link 问题。

    yarn add 「module」

    • 为每个 package 都安装指定依赖:
    yarn workspaces add react
    
    • 为指定的 package 安装特定依赖:
    yarn workspace package1 add react react-dom --save
    

    package1 一定是 packages/package1/package.json name 字段,有时候 package 的目录名和 name 字段不一致,要以 name 为准。

    • 添加依赖到根目录 node_modules 中:
    cd 根目录 
    yarn add @babel/core -D -W (-W 表示将依赖添加到 workspaces 根目录)
    
    • package 之间的相互依赖(会在 package/package.json 下添加该依赖):
    yarn workspace package1 add package2
    
    

    当 package2 没有发布在 npmjs 上时,此时会报错:package2 not found;解决办法:显示指定 package2 的版本: yarn workspace package1 add package2@^1.0.0

    • 在工程根目录下引入 packages/package 包:
    yarn add package@^1.0.0 -W
    

    yarn remove「module」

    和上面 yarn add 命令格式相同,只需将 add 替换为 remove 即可。

    yarn run 「script」

    • 运行工程根目录下 script:
    yarn test
    
    • 运行指定包模块下的 script:
    yarn workspace package1 run test
    

    命令虽然是在根目录下执行,但在执行文件中拿到的 process.cwd() 是 package 下的执行文件所在路径

    • 运行所有 package 下的 script 命令:
    yarn workspaces run test
    

    如果某个 package 下没有对应 script,将会终止命令,并报错。

    yarn workspaces info

    查看 workspace 依赖树信息。

    参考: [https://juejin.cn/post/7097820725301477406#heading-12]

    相关文章

      网友评论

          本文标题:lerna

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