sverweij/dependency-cruiser
GitHub: sverweij/dependency-cruiser
一款面向 JavaScript/TypeScript 生态的依赖规则验证与可视化工具,帮助团队在开发流程中持续守护代码架构边界。
Stars: 6628 | Forks: 281
# Dependency cruiser 
_根据你的规则验证和可视化依赖。_ JavaScript。TypeScript。CoffeeScript。ES6, CommonJS, AMD。
## 它能做什么?

它会遍历任何 JavaScript、TypeScript、LiveScript 或 CoffeeScript 项目中的依赖,并...
- ... 根据你[自定义的规则](./doc/rules-reference.md)对它们进行**验证**
- ... **报告**违反的规则
- 以文本形式(用于你的构建过程)
- 以图形形式(供你直观查看)
作为附带效果,它还可以生成各种输出格式的依赖关系图,包括可以贴在墙上给你奶奶看的[**炫酷可视化图表**](./doc/real-world-samples.md)。
## 我该如何使用它?
### 安装它 ...
```
npm install --save-dev dependency-cruiser
# 或
yarn add -D dependency-cruiser
pnpm add -D dependency-cruiser
```
### ... 并生成配置
```
npx depcruise --init
```
这会在你的环境中进行一些检查,问你一些问题,并创建一个适合你项目的 `.dependency-cruiser.js` 配置文件[^1][^2]。
[^1]:
我们在示例脚本中为了方便使用了 `npx`。当你在 `package.json` 的脚本中使用这些命令时,不需要在它们前面加上 `npx`。
[^2]:
如果你不想使用 `npx`,而是想用 `pnpx`(来自 `pnpm` 包管理器)或者 `yarn` —— 请查阅相应工具的文档。特别是 `pnpx`,它的语义与 `npx` 有很大不同,在使用前你需要了解清楚。同时:即使你是用不同于 `npm` 的包管理器安装的依赖,`npx` 也_应该_能正常工作。
### 向你的奶奶展示
要创建 `src` 文件夹中依赖关系的图表,你需要运行 dependency cruiser 并将输出类型指定为 `dot`,然后对结果运行 _GraphViz dot_[^3]。写成一行命令如下:
```
npx depcruise src --include-only "^src" --output-type dot | dot -T svg > dependency-graph.svg
```
- 你可以在[命令行界面](./doc/cli.md)文档中阅读更多关于 `--include-only` 及其他命令行选项的用法。
- _[真实案例](./doc/real-world-samples.md)_ 包含了 npm 上一些最常用项目的依赖巡航结果。
- 如果你的奶奶更喜欢 `mermaid`、`json`、`csv`、`html` 或纯文本这样的格式,我们也[为她提供了支持](./doc/cli.md#--output-type-specify-the-output-format)。
[^3]:
这里假设 GraphViz 的 `dot` 命令是可用的 —— 在大多数 Linux 及类似系统上通常都是如此。如果不可用,请查看 [GraphViz 下载页面](https://www.graphviz.org/download/) 获取如何将其安装到你机器上的指南。
### 验证一些东西
#### 声明一些规则
当你运行上面的 `depcruise --init` 时,该命令还会向 `.dependency-cruiser.js` 中添加一些适用于大多数项目的规则,比如检测**循环依赖**、package.json 中**缺失**的依赖、**孤立文件**,以及生产代码依赖了 dev- 或 optionalDependencies 的情况。
你可以通过修改该文件来开始添加你自己的规则。
示例规则:
```
{
"forbidden": [
{
"name": "not-to-test",
"comment": "don't allow dependencies from outside the test folder to test",
"severity": "error",
"from": { "pathNot": "^test" },
"to": { "path": "^test" }
}
]
}
```
- 要了解更多关于编写规则的信息,请阅读[编写规则](./doc/rules-tutorial.md)教程或[规则参考](./doc/rules-reference.md)
#### 报告它们
```
npx depcruise src
```
这将根据你的规则进行验证,并以类似 eslint 的格式显示任何违规情况:

还有更多报告验证结果的方式;例如在图形中(就像本 readme 顶部展示的那样)或者在一个独立的 `html` 文件中。
- 在[命令行界面](./doc/cli.md)文档中阅读更多关于 err、dot、csv 和 html 报告器的信息。
- dependency-cruiser 在其自身的构建过程中会使用自己来检查自身;请查看 [package.json](https://github.com/sverweij/dependency-cruiser/blob/main/package.json#L76) 中的 `depcruise` 脚本。
## 我想了解更多!
你来对地方了 :-) :
- 使用说明
- [命令行参考](./doc/cli.md)
- [编写规则](./doc/rules-tutorial.md)
- [规则参考](./doc/rules-reference.md)
- [选项参考](./doc/options-reference.md)
- [FAQ](./doc/faq.md)
- 参与 dependency-cruiser 开发
- [API](./doc/api.md)
- [输出格式](./doc/output-format.md)
- [添加其他输出格式](./doc/faq.md#q-how-do-i-add-a-new-output-format)
- [添加对其他 alt-js 语言的支持](./doc/faq.md#q-how-do-i-add-support-for-my-favorite-alt-js-language)
- 其他事项
- [路线图](https://github.com/sverweij/dependency-cruiser/projects/1)
- [联系方式](./doc/faq.md#contact)
- [真实展示案例](./doc/real-world-samples.md)
- [TypeScript、CoffeeScript 和 LiveScript 支持](./doc/faq.md#features)
- [对 .jsx、.tsx、.csx/ .cjsx、.vue 和 .svelte 的支持](./doc/faq.md#q-im-developing-in-react-and-use-jsx-tsx-csx-cjsx-how-do-i-get-that-to-work)
- [Webpack alias/ modules 支持](./doc/faq.md#q-does-this-work-with-webpack-configs-eg-alias-and-modules)
## 许可证
[MIT](LICENSE)
## 致谢
- [Marijn Haverbeke](http://marijnhaverbeke.nl) 以及其他
协作开发 [acorn](https://github.com/ternjs/acorn) 的人员 ——
这是 dependency-cruiser 用来推断
依赖关系的优秀 JavaScript 解析器。
- [unDraw](https://undraw.co/) 的 [Katerina Limpitsouni](https://twitter.com/ninaLimpi)
提供了 dependency-cruiser [社交媒体图片](https://repository-images.githubusercontent.com/74299372/239ed080-370b-11ea-8fe7-140cf7b90a33)中的 ollie 插画。
- 所有开源社区的成员,感谢他们友好地提出问题、
提交 issue 和发起 pull request,使得 dependency-cruiser 成为了一个更好用的工具。
## 构建状态
[](https://github.com/sverweij/dependency-cruiser/actions/workflows/ci.yml)
[](https://gitlab.com/sverweij/dependency-cruiser/builds)
[](https://npmjs.com/package/dependency-cruiser)
Made with :metal: in Holland.
标签:AMD, CMS安全, CoffeeScript, CommonJS, ES6, JavaScript, Linux安全, LiveScript, LNA, MITM代理, npm包, TypeScript, WebSocket, 云安全监控, 代码可视化, 代码审查, 依赖关系, 依赖分析, 依赖图, 依赖管理, 图形生成, 多包管理, 威胁情报, 安全插件, 开发者工具, 数据可视化, 暗色界面, 架构分析, 模块系统, 自定义脚本, 规则校验, 静态分析