Knip report
Knip report【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstageUnused devDependencies (2)NameLocationSeveritycross-fetchpackage.json:51:6errormswpackage.json:52:6error它表达的信息非常明确在 app-example-plugin 这个包的源码分析中[packages/app-example-plugin/package.json](https://link.gitcode.com/i/379a9271e44e28c6d1068e16e30cafef) 的 devDependencies 里有 2 个依赖从未被任何入口文件、测试或 Storybook 文件引用因此被标记为“Unused devDependencies”严重级别为 error | 依赖 | 报告位置 | 说明 | | :---- | :------- | :---- | | cross-fetch | package.json:51:6 | 定位到 package.json 第 51 行第 6 列与当前文件中 devDependencies.cross-fetch^4.0.0的声明位置一致 | | msw | package.json:52:6 | 报告记录为第 52 行第 6 列值得注意的是当前 [package.json](https://link.gitcode.com/i/379a9271e44e28c6d1068e16e30cafef) 的 devDependencies 中已不存在 msw 这一项说明报告反映的是某次生成时的依赖快照后续若依赖清单发生变化而未重新生成报告CI 校验会失败后文详述 | 这里的 package.json:51:6 这类“行:列”定位是 Knip 的 Markdown reporter 输出的一部分方便开发者直接跳转到 package.json 中对应的依赖声明处进行确认或删除。 ## 二、报告从何而来yarn build:knip-reports 命令 在仓库根目录的 [package.json](https://link.gitcode.com/i/ecffd44f617d10116fad3a4afd161348) 中定义了生成所有 Knip 报告的脚本 json build:knip-reports: backstage-repo-tools knip-reports它调用的backstage-repo-tools是工作区内部包 backstage/repo-tools。命令行入口注册在 packages/repo-tools/src/commands/index.tsprogram .command(knip-reports [paths...]) .option(--ci, CI run checks that there is no changes on knip reports) .description(Generate a knip report for selected packages) .action(lazy(() import(./knip-reports/knip-reports), buildKnipReports));命令的用法见 packages/repo-tools/src/commands/knip-reports/knip-reports.ts 中打印的 TIP 提示不带参数yarn build:knip-reports—— 对packages/*与plugins/*下所有工作区包生成报告并额外打印一条针对部分包的提示信息指定路径yarn build:knip-reports packages/app-example-plugin也支持packages/config packages/core-plugin-api plugins/*这样的多个路径/通配附加--ci进入 CI 模式不再写文件而是“报告必须与已提交内容完全一致否则失败”见下文第四节的分支逻辑。buildKnipReports函数本身的职责很轻量通过resolvePackagePaths解析出目标包目录列表然后委托给runKnipReports执行任何异常都会以process.exit(1)结束。三、生成机制源码解析knip-extractor.ts核心实现在 packages/repo-tools/src/commands/knip-reports/knip-extractor.ts。可以把它拆成四个环节来看。1. 动态生成 Knip 配置L56-L88generateKnipConfig会在仓库根目录写入一个临时的knip.json结束后由cleanKnipConfig删除其结构针对 Backstage 的工作区布局做了定制const knipConfig: KnipConfig { workspaces: { .: {}, {packages,plugins}/*: { entry: [dev/**/*.{ts,tsx}, src/index.{ts,tsx}], ignore: [ .eslintrc.js, config.d.ts, knexfile.js, node_modules/**, dist/**, {fixtures,migrations,templates}/**, src/tests/transforms/__fixtures__/**, // cli packaging tests ], }, }, jest: { entry: [src/setupTests.ts, src/**/*.test.{ts,tsx}], }, storybook: { entry: src/components/**/*.stories.tsx }, ignoreDependencies: [ // these is reported as a referenced optional peerDependencies // TBD: investigate what triggers these types/react, types/jest, internal/.*, // internal packages are not published and inlined backstage/cli, // everything depends on this for its package.json commands backstage/theme, // this uses declare module in .d.ts so is implicitly used whenever extensions are needed ], };几个值得注意的设计决策入口规则每个包的入口被认定为dev/**/*.{ts,tsx}与src/index.{ts,tsx}。以app-example-plugin为例其 package.json 中main/types均指向src/index.ts与这条规则一致。因此 Knip 只会从这些入口出发做引用可达性分析——凡是从入口、测试与 stories 都走不到的依赖就会被判为“unused”。这也正是cross-fetch、msw这类“历史上用于测试、后来测试方式改变”的依赖会被点名的原因它们不在任何 import 图里。jest / storybook 入口测试文件src/**/*.test.{ts,tsx}、src/setupTests.ts和组件 stories 都算作入口保证“只被测试用到的依赖”不会被误报为未使用。ignoreDependencies 白名单backstage/cli、backstage/theme、types/react等被显式豁免注释中给出了理由如backstage/theme通过.d.ts中的declare module被隐式使用。白名单中没有任何一项覆盖cross-fetch或msw所以二者被如实报告。2. 单包执行 Knip 与 CLI 参数L96-L120handlePackage对每个包执行仓库根node_modules/knip/bin/knip.js关键参数如下let report await run( ${knipDir}/knip.js, -W, // Run the desired workspace packageDir, --config, knip.json, --no-exit-code, // Removing this will end the process in case there are findings by knip --no-progress, // Remove unnecessary debugging from output // TODO: Add more checks when dependencies start to look ok, see https://knip.dev/reference/cli#--include --include, dependencies,unlisted, --reporter, markdown, );【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Python实现的信息收集工具箱:域名解析、CDN检测与端口扫描

Python实现的信息收集工具箱:域名解析、CDN检测与端口扫描

简介:这是一份基于Python开发的域名与网络资产信息收集工具源码,涵盖域名解析、IP反查域名、WHOIS查询、CDN检测、端口扫描、目录扫描、子域名挖掘等常用功能,适合安全测试人员、网络运维工程师及Python网络编程学习者参考实践。压缩包整体约…

2026/9/13 19:59:25 阅读更多 →
车规级CAN超时丢包抖动的根因与容错设计

车规级CAN超时丢包抖动的根因与容错设计

1. 这不是“假故障”,是车规级通信的生存逻辑在说话 你有没有遇到过这样的场景:整车下线测试时,CAN报文偶尔出现几帧超时,诊断仪显示“通信不稳定”,但拆开线束、换掉ECU、重刷固件,问题照旧;售…

2026/9/13 19:59:25 阅读更多 →
Cap 录制可靠性工程实践:从分片格式保全到跨平台安全契约与真实录制验证

Cap 录制可靠性工程实践:从分片格式保全到跨平台安全契约与真实录制验证

Cap 录制可靠性工程实践:从分片格式保全到跨平台安全契约与真实录制验证 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap Cap(开源 Loom …

2026/9/13 19:59:25 阅读更多 →

最新新闻

n8n-mcp 实战:Python Code 节点五大高频错误模式与系统化排查指南

n8n-mcp 实战:Python Code 节点五大高频错误模式与系统化排查指南

n8n-mcp 实战:Python Code 节点五大高频错误模式与系统化排查指南 【免费下载链接】n8n-mcp A MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you 项目地址: https://gitcode.com/GitHub_Trending/n8/n8n-mcp 导读…

2026/9/13 22:52:59 阅读更多 →
p5.js 友好错误系统(FES)与文档化工作全解析:GSoC 2023 实践复盘与源码级指南

p5.js 友好错误系统(FES)与文档化工作全解析:GSoC 2023 实践复盘与源码级指南

p5.js 友好错误系统(FES)与文档化工作全解析:GSoC 2023 实践复盘与源码级指南 【免费下载链接】p5.js p5.js is a client-side JS platform that empowers artists, designers, students, and anyone to learn to code and express themselve…

2026/9/13 22:52:59 阅读更多 →
09-Rust 测试与质量保证(单元测试 + 集成测试 + Mock + Benchmark + Fuzzing + CI/CD)

09-Rust 测试与质量保证(单元测试 + 集成测试 + Mock + Benchmark + Fuzzing + CI/CD)

摘要:本文系统讲解 Rust 测试与质量保证体系,涵盖单元测试与集成测试、文档测试、Mock 与测试桩、性能测试(Benchmark)、模糊测试(Fuzzing)、CI/CD 集成等核心内容。每个知识点配有完整代码示例、对比表格、…

2026/9/13 22:52:59 阅读更多 →
MaaAssistantArknights 連線設定深度指南:ADB 連線、截圖/觸控增強與多開實戰

MaaAssistantArknights 連線設定深度指南:ADB 連線、截圖/觸控增強與多開實戰

MaaAssistantArknights 連線設定深度指南:ADB 連線、截圖/觸控增強與多開實戰 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. …

2026/9/13 22:52:59 阅读更多 →
彻底讲透 JDK1.8 ConcurrentHashMap 线程安全原理

彻底讲透 JDK1.8 ConcurrentHashMap 线程安全原理

彻底讲透 JDK1.8 ConcurrentHashMap 线程安全原理(全网最通俗图文完整版)前言HashMap 线程不安全,多线程并发 put 会出现数据覆盖、数据丢失;JDK1.7 还会出现扩容死循环。为了解决并发安全问题,JDK1.8 的 ConcurrentHa…

2026/9/13 22:51:58 阅读更多 →
某车EPB电子驻车系统

某车EPB电子驻车系统

1.传统机械驻车 为了便于了解电子驻车原理,首先需要了解一下传统机械驻车系统,它由驻车制动手阀、挂车手阀、继动阀、挂车控制阀、复合制动气室等部件组成。系统功能包括驻车制动、应急制动、挂车制动三个方面。 ①驻车制动控制: 挂车制动控制…

2026/9/13 22:51:58 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →