先把这次的结论写前面,免得绕:
- 用 npm,就保留
package-lock.json - 用 pnpm,就保留
pnpm-lock.yaml - 不要混着来
这不是说 package-lock.json 不好。
它在 npm 项目里本来就是对的。
同理,pnpm-lock.yaml 在 pnpm 项目里也是对的。
问题出在“同一个项目混两套习惯”。
现象
import { createInjectionState } from '@vueuse/core'在编辑器里飘红- 但项目 dev / build 都能过
一开始挺迷惑:都能跑,为什么还红?
后来确认是这个情况:
@vueuse/core当时是间接依赖(被别的包带进来)- 运行时能解析到,所以能跑
- 但 TS/IDE 更偏向你“是否显式声明”这个依赖,所以给红线提示
说白了就是:
运行时能找到,不代表编辑器就认你这写法“规范”。
处理方式
主要做了这几件事:
- 明确这个项目只用 pnpm
- 显式安装
@vueuse/core - 把
vue/vue-router从latest改成固定版本 - 只保留
pnpm-lock.yaml
做完之后,编辑器红线和实际运行结果就一致了,后面也更稳。
评论区