# @art-suite/monorepo 中文文档

规范地址：https://npmcn.com/package/%40art-suite/monorepo/

版本：1\.16\.0
npm 元数据更新时间：2026-09-23T19:03:19.345Z
中文译文更新时间：2026-11-06T20:35:36.946Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40art-suite/monorepo
原文对照：https://npmcn.com/package/%40art-suite/monorepo/?lang=original
项目主页：https://github.com/art-suite/art-suite-foundations
源码仓库：https://github.com/art-suite/art-suite-foundations

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：369 kB，73 个文件
- TypeScript 类型：未声明
- 运行依赖：9 个
- 首次发布：2020-06-23T00:52:48.619Z
- 最新版本发布：2026-09-23T19:03:19.147Z
- 近 30 天下载量：3938（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：67（近 12 个月 4 个）

## 中文简介

一个通过统一依赖性版本来简化 JavaScript 单列管理的意见工具

## 安装

```sh
npm install @art-suite/monorepo
```

也可以使用：`pnpm add @art-suite/monorepo`、`yarn add @art-suite/monorepo`、`bun add @art-suite/monorepo`

## README

# 艺术-摩纳哥

Art-monorepo是管理一个JavaScript monorepo的依赖性的工具. 这是一个有意见的工具,有一个核心设计原则:

-   **Monrepo中的所有软件包都应该使用任何外部依赖的同版本.**

因此,鉴于这一原则,只应有一个 `package-lock.json` 文件和一个 `node_modules/` 文件夹 - 整个单列波的根.

与其他单列波工具不同,Art-monorepo对于文件夹结构是灵活的. 它只是扫描一下 `package.json` 在任何子文件夹中的文件,允许您随意组织软件包。 这使得将相干软件包组合在一起并有选择地根据路径对特定软件包组运行命令变得容易.

艺术莫诺雷波的主要用途是管理 `art-monorepo sync-install` 命令.

Art-monorepo还拥有用于运行所有包上的命令的手动工具,例如测试,任何npm标记或任何 shell-command.

## 快速启动指南

### 添加到已存在的 Repo

可以立即开始在现有的回放中添加子包而无需任何重大重构. 只要确保使用 `--preserveRootDependencies` 运行时选项 `art-monorepo sync`,或设置在一次 `art-monorepo.config.json` 文件(参见 [配置文件](https://npmcn.com/package/%40art-suite/monorepo/#readme-config-file)) (中文(简体) ). 这就是:

安装艺术莫诺雷波 :

```shell
npm install art-monorepo --save-dev
```

在您的软件包中添加脚本。 json:

```json
{
  "scripts": {
    "monorepo:sync": "npx art-monorepo sync --preserveRootDependencies",
    "monorepo:sync:install": "npx art-monorepo sync-install --preserveRootDependencies",
    "monorepo:sync:reset:install": "npx art-monorepo sync-reset-install --preserveRootDependencies",

    // optional shortcuts to test, build and clean both your core package and all sub-packages
    "monorepo:test": "npm run test && npx art-monorepo test", // test all packages
    "monorepo:build": "npm run build && npx art-monorepo build", // build all packages
    "monorepo:run": "npx art-monorepo run -- ", // npm run XXX on all packages with that script defined
    "monorepo:exec": "npx art-monorepo exec -- " // run shell command XXX on all packages
  }
}
```

### 新鲜的 Mono Repo 快速启动( 建议)

尽管您可以使用 art-monorepo , 其中根包也是一个"代码"包. 我建议,根包 仅应前置管理单一repo。 与其他分包相比,它一般更清洁更灵活,因为它不给一个包(根包)特殊考虑.

安装艺术莫诺雷波 :

```shell
npm install art-monorepo --save-dev
```

在您的软件包中添加脚本。 json:

```json
{
  "scripts": {
    "sync": "npx art-monorepo sync",
    "sync:install": "npx art-monorepo sync-install",
    "sync:reset:install": "npx art-monorepo sync-reset-install",

    // optional shortcuts to test, build and clean both your core package and all sub-packages
    "test": "npx art-monorepo test", // test all packages
    "build": "npx art-monorepo build", // build all packages
    "monorepo:run": "npx art-monorepo run -- ", // npm run XXX on all packages with that script defined
    "monorepo:exec": "npx art-monorepo exec -- " // run shell command XXX on all packages
  }
}
```

## 运行艺术- Monorepo

您可以在任何地方运行 Art-Monorepo :

```shell
npx art-monorepo
```

如果在全球安装:

```shell
npm install -g art-monorepo
```

你可以运行它只是:

```shell
art-monorepo
```

## 图标概览

扩展的帮助是通过 `--help` 所有命令的旗帜。 并非所有可用的选项在此列出,但命令行帮助将始终是最新的和完整的.

每次运行时使用的设置, 例如 `--preserveRootDependencies` 和要忽略的文件夹列表, 可以在 `art-monorepo.config.json` 文档。 见 [配置文件](https://npmcn.com/package/%40art-suite/monorepo/#readme-config-file)。 。 。 .

### 核心命令

-   `art-monorepo sync [--preserveRootDependencies, --quiet]`:将根包.json与所有子包同步.
-   `art-monorepo sync-install [--preserveRootDependencies, --quiet]`: 运行 `art-monorepo sync` 然后运行 `npm install`。 。 。 .
-   `art-monorepo sync-reset-install [--preserveRootDependencies, --quiet]`:完整地,新鲜地重建所安装的单列波中的所有软件包.

### 工具命令

-   `art-monorepo build [--folder, --sync, --verbose]`: 运行 `npm run build` 每个子文件夹中都有一个 package.json 文件.
-   `art-monorepo test [--folder, --sync, --verbose]`: 运行 `npm test` 每个子文件夹中都有一个 package.json 文件.
-   `art-monorepo run X [--folder, --sync, --verbose]`: 运行 `npm run X` 所有软件包中.
-   `art-monorepo exec X [--folder, --sync, --verbose]`: 在每个子文件夹中运行 shell command X,并带有一个 package.json 文件.
-   `art-monorepo versions [--verbose]`: 显示所有软件包版本(本地版本并发布).
-   `art-monorepo check`: 检查单列波是否干净( 根部只有一个包锁. json和一个节点 模块文件夹) .
-   `art-monorepo clean`: 高级: 在所有子文件夹中删除所有 package-lock.json 文件和节点 模块文件夹.

## 示例使用

### 同步依赖

艺术-Monorepo的主要用途是同步您单曲的依赖. 简单运行 :

```shell
art-monorepo sync-install
```

或者你可以分两步走

```shell
art-monorepo sync
# review how sync updated your package.json files
npm install
```

这可确保您的软件包在依赖性版本中保持一致 。 也允许您并行开发多个软件包,因为单曲内的任何交叉依赖都会被绑定到本地版本.

#### 如何同步工作

同步保证 :

-   所有子包都使用每个外部依赖的同版本.
-   所有内部的跨包引用都会被更新到最新版本并链接到使用本地包而不是已发布的npm版本.
-   Root package.json包括所有子包中使用的所有外部依赖性.

同步分三个步骤进行:

1.  **干净**:去除子包中所有包锁.json文件和节点 模块文件夹. 根应该是唯一一个有锁文件和已安装模块的地方.
2.  **更新子软件包**: 将所有子包依赖性版本相互和根对齐. 版本分辨率 :
    -   如果软件包已经在根包.json文件中存在,则使用该版本.
    -   如果包存在于多子包中,且版本不同,则报告出错.
3.  **更新根**: 从子包中合并任何新的或更新的依赖性,并确保所有跨包依赖性使用"file:..." npm协议(即所有包都链接到使用本地包而不是被发布的npm版本).

#### 关于保存的依赖性选项

默认情况下,root package.json只作为单一repo管理器处理——而不是活动代码包. 它的依赖性领域被充分再生,以代表所有子包依赖性和devdependents的结合. 它的devdependents field是未受侵犯的(保留给艺术-monorepo等单重工具). 子包中没有使用的任何根依赖将被去除.

如果根也用于编码,则使用 `--preserveRootDependencies` 选项。 这防止了根的依赖性。 相反,该工具将子包依赖性合并到根上. 您负责手动消除过时的依赖性 .

## 配置文件

在命令行上重复的设置 `art-monorepo.config.json` 单列波根中的文件 :

```json
{
  "preserveRootDependencies": true,
  "ignore": ["packages/legacy", "experiments"]
}
```

### 保留依赖性

默认 `false`设定为 `true` 跟过去一样 `--preserveRootDependencies` 改为 `sync`, (中文(简体) ), `sync-install` 财务报告和审定财务报表 `sync-reset-install`,它保持根的依赖性而不使用子包(见 [关于保存的依赖性选项](https://npmcn.com/package/%40art-suite/monorepo/#readme-about-the-preserverootdependencies-option)) (中文(简体) ). 明确的命令行值仍然胜利,所以 `--preserveRootDependencies=false` 覆盖一个运行的配置 .

### 忽略

默认 `[]`。相对于单一repo 根的文件夹路径列表,其软件包 art-monorepo 应当留下。 每个条目名称包含一个文件夹的文件夹 `package.json`,而不是 `package.json` 存档。 当 art-monorepo 搜索软件包时, 文件夹和下面所有的东西都会跳过, 因此它适用于每个命令 : `sync`, (中文(简体) ), `test`, (中文(简体) ), `build`, (中文(简体) ), `run`, (中文(简体) ), `exec`, (中文(简体) ), `versions`, (中文(简体) ), `check` 财务报告和审定财务报表 `clean`。 。 。 .

被忽略的文件夹就艺术-莫诺雷波而言,位于单列波外. 他们可以保留自己的 `node_modules/` 财务报告和审定财务报表 `package-lock.json`, (中文(简体) ), `check` 不以他们为污秽 `clean` 永不删除其中的内容。 它们的依赖性版本与所剩的单列波不相统一,它们的名字也不被添加到根上 `package.json`。 。 。 .

路径被匹配为已写入, 并带有线索 `./` 和任何线索 `/` 容忍: `"./packages/legacy/"` 财务报告和审定财务报表 `"packages/legacy"` 意思一样 由于条目被作为图案交给文件搜索, glob 语法如 `"packages/legacy-*"` 也行,但平道是预定用途.

### 行为

-   当文件缺失时,所有默认都适用.
-   未知密钥产生警告, 否则会被忽略 .
-   无效的 JSON, 或一个错误类型的值, 以错误的方式停止命令 .
-   当文件设置任何东西时,每个命令都会打印一个活动设置的一行摘要. `--quiet` 压制之.

## 批量命令

Art-Monorepo为您所有软件包的批量运行命令提供了多个工具. 对于每个这些工具,您可以选择仅在给定子文件夹内的包上运行它们(使用 `--folder XYZ`) 你可以选择同步运行它们,一次一个(与 `--sync`) (中文(简体) ). 默认情况下,它们都将平行运行.

默认情况下,不显示成功命令的输出 。 使用 `--verbose` 以显示所有命令的输出.

### 对所有子软件包进行测试

```shell
art-monorepo test
```

此命令执行 `npm run test` 包含一个 package.json 文件的子文件夹中.

### 在所有子软件包上运行脚本

```shell
art-monorepo run script-name
```

如果一个包没有匹配名的脚本,它就会被跳过.

```shell
> art-monorepo run foobar
FOOBARING: 36 packages
SKIPPED: packages/neptune-namespaces-runtime (package.json does not have a 'foobar' script)
SKIPPED: packages/neptune-namespaces (package.json does not have a 'foobar' script)

RESULTS:
  succeeded: 0
  skipped: 2
```

### 运行任意命令

```shell
art-monorepo exec "ls -la" [--folder, --sync, --verbose]
```

执行 monrepo 中所有包中的任何 shell 命令 。 如果你提供 `--folder` 参数,它只会运行该子路径内对软件包的命令。 您想要传递给您的命令的任何选项, 都应该在引用的命令内 。 例如: `"ls -la"`。 。 。 .

## 完全重置并重建

如果您遇到 npm 创建多套件锁的问题 。 json 文件或节点模块文件夹,您可以进行完整的重置 :

```shell
art-monorepo sync-reset-install
```

此命令 :

1.  **同步**: 所有 package.json 文件在单列波
2.  **重装**: 删除全部 `./package-lock.json` 财务报告和审定财务报表 `./node_modules/` ,包括根
3.  **安装**: 运行 `npm install` 在树根中
4.  **检查**: 单相机现在已清空( 根中只有一个 package- lock.json 和一个节点- 模块文件夹)

> **说明1**: 此重建根 `./package-lock.json`,因此一些依赖性可能会被更新. **说明2**:这触发了单列波中所有软件包的新安装,所以如果有很多软件包的话可能会很慢.

## 共同活动

### 在子包中添加依赖性

1.  `cd packages/foo` 输入子包文件夹
2.  `npm install xyz` 您的依赖性 - 这将创建一个临时节点 模块/ and package-lock.json, 但没关系
3.  `cd ../..` 回到根头
4.  `art-monorepo sync-install`
    -   将依赖同步到根包. json
    -   删除临时子包的节点 模块/和包锁.json
    -   在根节点/ 和包锁中安装新的依赖性. json

### 添加一个新的子包

1.  创建一个新文件夹并依照其他子包的图案创建文件. 最重要的是 `name` 在 package.json 文件中必须是独有的,并且您计划用来导入/要求该软件包在其他地方的名称.
2.  根内: `art-monorepo sync-install`

### 从 Monorepo 中排除文件夹

有时一个文件夹会持有一个你不希望管理的软件包:一个拥有自己锁文件的销售项目,一个给不相容的版本打针的实验,或者一个包的中程迁移. 把它列在下面 `ignore` 内 `art-monorepo.config.json` 在根中:

```json
{
  "ignore": ["vendor/legacy-app", "experiments"]
}
```

从那时起,每个命令都会跳过那些文件夹和下面的一切. 见 [配置文件](https://npmcn.com/package/%40art-suite/monorepo/#readme-config-file) 详细情况.

### 检查 Monorepo 健康

```shell
art-monorepo check
```

这验证您的单重键遵循了核心原则 - 只有一个 package-lock.json 和 root 中的一个节点 模块文件夹 .

### 查看软件包版本

```shell
art-monorepo versions
```

这显示了所有软件包的所有本地版本和已出版版本,如果它们不同步,则简要地说明不同的内容. 如果您正在发布许多软件包, 并试图保持所有软件包的同步, 这是一个强大的工具 .

## 诡计

### 同步发布所有软件包

有时候我只想用一个快速的方法 来公布我所有的最新和同步的包裹 这个简短的剧本做得相当不错,在多数情况下是有效的.

```shell
art-monorepo exec `npm version patch` # version bump everything - just in case
art-monorepo sync                     # sync all cross-dependencies to use the latest version
art-monorepo exec `npm publish`       # publish!
git commit . -m 'patched, synced and published all packages'
```

## 常见问题

### @art-suite/monorepo 是什么？

一个通过统一依赖性版本来简化 JavaScript 单列管理的意见工具

### 如何安装 @art-suite/monorepo？

在项目目录运行 npm install @art-suite/monorepo，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 art-monorepo，可以用 npx art-monorepo 直接运行。

### @art-suite/monorepo 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/art-suite\_\_monorepo 是否存在。

### @art-suite/monorepo 可以商用吗？

@art-suite/monorepo 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @art-suite/monorepo 的下载量有多少？

根据 npm 官方下载统计，@art-suite/monorepo 在 2026/10/07 – 2026/11/05 这 30 天内被下载 3,938 次，日均约 131 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @art-suite/monorepo 还在维护吗？

最新版本 1\.16\.0 发布于 2026/09/24（1 个月前）；至今共发布 67 个版本，其中过去 12 个月发布了 4 个；首次发布于 2020/06/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

