我不是很了解 yarn ,本文是个人观点,没有权威性,仅供参考,如果有错误请指出,谢谢
起因是我之前开发了个Koishi插件,但并没有上传到npm,而是选择使用 yarn add ./koishi-plugin-novel-downloader-1.0.0.tgz 从本地文件安装,此时一切正常。
但我并不了解 yarn的机制,导致在我开发完,并且投入使用后, 便删除了本地的 koishi-plugin-novel-downloader-1.0.0.tgz (我以为反正已经装到 koishi 里了,安装包就没用了),于是我的插件市场便无法进行 任何插件 的安装/升级/卸载 了。
日志:
2026-06-09 16:56:52 [I] market Yarn 4.1.1
2026-06-09 16:56:52 [I] market ┌ Resolution step
2026-06-09 16:56:52 [W] market Error: koishi-plugin-novel-downloader@file:./koishi-plugin-novel-downloader-1.0.0.tgz::locator=%40koishijs%2Fboilerplate%40workspace%3A.: ENOENT: no such file or directory, open '/koishi/koishi-plugin-novel-downloader-1.0.0.tgz'
2026-06-09 16:56:52 [I] market └ Completed
2026-06-09 16:56:52 [W] market Failed with errors in 0s 161ms
无论进行哪个插件的安装/升级/卸载,都会提示上面的信息。
我将日志丢给了 AI 进行分析,最后得出的结论是:
Yarn 在执行任何依赖操作(yarn install 、yarn add 、yarn remove 等)时,都会先完成依赖解析 (Resolution step),也就是把 package.json 中所有已声明的依赖全部确定好版本和来源。
如果项目根目录的 package.json (或者某个 workspace 的 package.json )里已经写了:
"dependencies": { "koishi-plugin-novel-downloader": "file:./koishi-plugin-novel-downloader-1.0.0.tgz" }
那么哪怕只是运行 yarn add lodash ,Yarn 也会先尝试解析这个本地文件依赖,找不到就立刻失败,根本不会走到下载 lodash 那一步。
解决方案:重新编译一次这个包,然后执行 yarn add进行安装,便能恢复正常。