sverweij/dependency-cruiser

GitHub: sverweij/dependency-cruiser

一款面向 JavaScript/TypeScript 生态的依赖规则验证与可视化工具,帮助团队在开发流程中持续守护代码架构边界。

Stars: 6628 | Forks: 281

# Dependency cruiser ![Dependency cruiser](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/722645395a021201.png) _根据你的规则验证和可视化依赖。_ JavaScript。TypeScript。CoffeeScript。ES6, CommonJS, AMD。 ## 它能做什么? ![炫酷的 dot 输出以吊起你的胃口](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3f2f7c11c9021202.png) 它会遍历任何 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 的格式显示任何违规情况: ![示例错误输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/15c462cd88021203.png) 还有更多报告验证结果的方式;例如在图形中(就像本 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 成为了一个更好用的工具。 ## 构建状态 [![GitHub Workflow Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/613d704f92021204.svg)](https://github.com/sverweij/dependency-cruiser/actions/workflows/ci.yml) [![coverage](https://gitlab.com/sverweij/dependency-cruiser/badges/master/coverage.svg)](https://gitlab.com/sverweij/dependency-cruiser/builds) [![total downloads on npm](https://img.shields.io/npm/dt/dependency-cruiser.svg?maxAge=2591999)](https://npmjs.com/package/dependency-cruiser) Made with :metal: in Holland.
标签:AMD, CMS安全, CoffeeScript, CommonJS, ES6, JavaScript, Linux安全, LiveScript, LNA, MITM代理, npm包, TypeScript, WebSocket, 云安全监控, 代码可视化, 代码审查, 依赖关系, 依赖分析, 依赖图, 依赖管理, 图形生成, 多包管理, 威胁情报, 安全插件, 开发者工具, 数据可视化, 暗色界面, 架构分析, 模块系统, 自定义脚本, 规则校验, 静态分析