多包管理工具

发布于:2025-03-21 ⋅ 阅读:(16) ⋅ 点赞:(0)

一.bolt(停止维护)

公共库组件的特征之一就是代码复用率很高,改其中一部分代码,大部分组件就都需要更新一遍依赖,所以如何快速更新依赖、添加版本号、发布组件、上传组件代码就成了一个问题。这里我使用了bolt来批量管理组件的迭代

1.安装工具

首先使用 yarn 将 Bolt 安装到全局环境中:

yarn global add bolt

2.创建Bolt

Create a new Bolt package in the current directory:

bolt init//在当前目录下创建新的bolt

bolt init --yes //将已有的文件夹转变为bolt

/**如果报错bolt不是命令,可以用npm重新安装bolt,命令如下 */
// npm i bolt --global

当前目录下会出现一个package.json

{
  "name": "normal-charts",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "bolt": {
    "workspaces": [
      "src/*"
    ]
  },
  "devDependencies": {
    "standard-version": "^9.3.2"
  },
  "dependencies": {
    "@easyv/charts": "^1.1.8"
  }
}

3.Bolt文件

将相同依赖包/需批量操作的代码库放入文件

 "scripts": {
    "start": "easyv dev",
    "publishToTest": "easyv publish --host=online basicAreaV2"
  },

4.Bolt的使用

主要使用场景示例

//批量发布组件
bolt ws run publishToTest  
//批量更新公共库
bolt ws exec -- npm install @easyv/charts  
bolt ws exec -- git pull    
bolt ws exec -- git add .   
bolt ws exec -- git commit -m "测试批量提交" 
bolt ws exec -- git push origin master  

注:windows电脑用powershell可能会无法执行批量命令,可以试试把终端切换成git bash

二.lerna

优势:

社区较大,维护活跃,依赖更加灵活,支持清理依赖(lerna clean),支持链接本地依赖(lerna bootstrap)

1.安装并初始化

mkdir lerna-repo 
cd  目标文件
npx lerna init

这将会创建一个 lerna.json 配置文件和一个 package 文件夹,如下

lerna-repo/
  packages/
  package.json
  lerna.json

2.两种模式(Fixed 和 Independent

  • Fixed 模式:所有包共享一个版本号,适合紧密相关的包。(默认)

  • Independent 模式:每个包有独立的版本号,适合相对独立的包(lerna init --independent)

3.文件

lerna:

{
  "version": "0.0.0", // 版本管理模式
  "packages": ["packages/*"], // 包的位置
  "npmClient": "yarn", // 包管理器
  "useWorkspaces": true, // 是否使用 Yarn Workspaces
  "command": {
    "publish": {
      "ignoreChanges": ["*.md"], // 忽略的文件
      "message": "chore(release): publish", // 提交信息
      "registry": "https://registry.npmjs.org/" // 发布到的 npm 仓库
    },
    "bootstrap": {
      "hoist": true // 提升依赖
    }
  }
}

同时你可以在每个子项目中定义相同的脚本,这样使用lerna运行的时候就会自动查找脚本并依次运行,代码如下

{
  "scripts": {
    "build": "tsc -p .",
    "test": "jest"
  }
}

直接运行lerna build即可运行所有子项目

如果觉得每一个文件定义很麻烦,可以直接在根目录packge.json中定义脚本

{
  "scripts": {
    "publishToTest": "lerna exec -- easyv publish --host=online basicAreaV2"
  }
}
npm run publishToTest

并且运行全局脚本即可每个子项目运行

同样的也可以定义命令过滤或者选中某些文件

4.常见命令


1、lerna bootstrap
初始化项目依赖以及建立link关系以及预发布处理

2、lerna publish
lerna publish做了一套npm标准的发布流程管理

3、lerna changed
用来查看发生改变的package,即预发布的包

4、lerna clean
用来清空所有package的node_moudles依赖

5、lerna run
用来执行每个package下的scripts命令

6、lerna add

3.Nx

Lerna 和 Yarn Workspaces 专注于包的管理和发布,而 Nx 则同时涵盖了开发、构建、测试、依赖管理和性能优化等多个方面。并且Nx兼容lerna