https://github.com/rni-l/multi-dependent-management
批量管理 npm 项目依赖的命令行工具
https://github.com/rni-l/multi-dependent-management
node-cli npm
Last synced: about 2 months ago
JSON representation
批量管理 npm 项目依赖的命令行工具
- Host: GitHub
- URL: https://github.com/rni-l/multi-dependent-management
- Owner: rni-l
- Created: 2021-09-19T02:45:05.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-10-08T03:21:23.000Z (over 4 years ago)
- Last Synced: 2025-09-28T13:51:32.940Z (6 months ago)
- Topics: node-cli, npm
- Language: TypeScript
- Homepage:
- Size: 6.1 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# multi-dependent-management
>基于 node.js 的命令行工具,用于管理多个项目的依赖。
   
## 概述
该工具是用于管理多个项目的依赖,根据你输入的路径,递归查询所有的 `package.json`(默认忽略 `node_modules` 文件),进行依赖管理:
1. 依赖批量版本升级(基于 [npm-check-updates](https://github.com/raineorshine/npm-check-updates))
2. 依赖批量移除
3. 依赖批量添加/变更
4. 查看多项目内的依赖差异
## 安装
```shell
# 使用 npx 执行
npx multi-dependent-management
# 全局安装
npm i multi-dependent-management -g
```
## 快速使用
### 依赖版本升级
根据你选中的项目,对依赖进行批量升级。注意,这个只是修改你的 `package.json`,而不会执行 `npm install` 。
```shell
# -p 后面带你要执行的项目路径
mdm upgrade -p ./project
```

首先会递归查询该路径下所有的 `package.json` 文件,然后使用 [npm-check-updates](https://github.com/raineorshine/npm-check-updates) 检查每个项目的依赖版本是否最新,将可以更新的依赖一一展现出来,让你选择哪个依赖需要更新:

### 依赖移除
根据你选中的项目,对依赖进行批量移除。
```shell
# -p 后面带你要执行的项目路径
mdm remove -p ./project
```

首先会让你输入要移除的依赖,使用 `,` 分隔每个依赖名。
接着会递归查询该路径下所有的 `package.json` 文件,让你选择哪个项目需要移除依赖。
### 依赖变更
根据你选中的项目,对依赖进行批量变更。
```shell
# -p 后面带你要执行的项目路径
mdm update -p ./project
```

首先会让你输入要更新的依赖,使用 `,` 分隔每个依赖名。
接着会让你选择是否安装依赖:

如果选择“是”,则会执行 `npm install {package}`,
否则执行:`npm install {package} --package-lock-only`,
最后会递归查询该路径下所有的 `package.json` 文件,让你选择哪个项目需要更新依赖。
变更操作,会使用 `npm install` 进行依赖变更,而不是直接修改 `package.json` 文件,保证包名的顺序一致。
### 查看依赖差异
根据你选中的项目,查看各个项目的依赖版本差异。
```shell
# -p 后面带你要执行的项目路径
mdm diff -p ./project
```

`diff` 功能,会根据你选中的项目的依赖版本,返回需要升级的依赖和对应最高的版本。当你选择更新,会修改所有匹配的依赖变为当前最高的版本。
简单来说,就是同步你选中项目所有依赖的版本,变成一样。
`diff` 的更新操作,是直接修改 `package.json`,不会进行依赖安装。
### 脚本命令执行
该功能根据你选择的项目,批量执行脚本命令。
```shell
# -p 后面带你要执行的项目路径
mdm shell -p ./project
```

`shell` 功能,会根据你选中的项目,执行相关的脚本命令,该功能自由度比较高,可以搭配不同的操作。
选完要处理的项目后,会让你先输入都执行的命令,没有的话,不输入保存就行了:

接着就是输入每个项目单独执行的命令:

最后会让你确认是否按照上面的顺序执行:

执行结果:

### 路径匹配
```shell
# 过滤 /demo/a/ 下的所有文件夹 和所有子路径中末位是 b 的文件夹
mdm update -p /demo -e /demo/a/**,**/b
```
`-p` 参数是从哪个路径开始递归查询,`-e` 参数是对路径进行过滤,支持传入多个值,用 `,` 隔开。
我这里的处理,是将传给 `-e` 的值,转成数组并去空格处理,然后使用 `minimatch(path, {value})` 进行判断,如果返回 `true` 代表命中,则过滤该路径。
详细匹配规则,参考 [minimatch](https://github.com/isaacs/minimatch)。
## 应用场景
我现在日常开发,因为人少系统多,经常是一两个前端去管理多个简单的管理系统,而这些系统都使用内部的组件库进行搭建:

如果当我们的组件库有 bug 或者有功能迭代,要多个系统同时去发布修复版,这时候就有下面的流程:

有 10 个系统,就要进行 10 次这样的操作,非常麻烦,所以才开发该工具。
使用该工具,只需通过一次或两次命令就可以完成。
两次命令:
```shell
# 去到对面的目录,添加相关的过滤条件
mdm upgrade -p ./project -e **/abc,**/abc2
# 升级完需要的依赖后,执行相关提交命令
mdm shell -p ./project -e **/abc,**/abc2
# shell 模式会进行编辑状态,输入:
# git add ./
# git commit -m 'fix: 更新依赖,修复 xx 问题'
# git push origin fix
```
当执行完上述步骤,对应的项目就会更新选中的依赖,并根据你输入的 `shell` 命令,提交到你的仓库。
一次命令:
```shell
# 可以直接通过 shell 命令,一次完成
mdm shell -p ./project -e **/abc,**/abc2
# shell 模式会进行编辑状态,输入:
# npm i abc@1.1.0 -S
# git add ./
# git commit -m 'fix: 更新依赖,修复 xx 问题'
# git push origin fix
```
## TODO
1. ~~添加操作命令的配置项,比如文件匹配限制~~
2. ~~添加命令行操作,可以对项目批量执行 shell 命令~~
3. ~~添加依赖差异查看命令,查询匹配的项目,查看项目内每个依赖和当前最高版本的差异~~