使用 Vue3 + Pinia + PNPM + Vite 开发一个前端项目时,运行preview
,报错:
pinia Cannot read properties of undefined (reading '_s')
报错的代码是压缩后的:
function we(e, t, n) {
let s, c;
const u = typeof t == "function";
typeof e == "string" ? ((s = e), (c = u ? n : t)) : ((c = e), (s = e.id));
function a(o, h) {
const f = ie();
return (
(o = o || (f ? ue(be, null) : null)),
o && F(o),
(o = H),
o._s.has(s) || (u ? V(s, t, c, o) : ve(s, c, o)), // 报错位置
o._s.get(s)
);
}
return (a.$id = s), a;
}
大意像是读取一个 store的名称失败导致。而我确认这个 store 已经被注册(defineStore)了。
翻阅 pinia 源码,定位到位置:https://github.com/vuejs/pinia/blob/5c94d26e11f8d2ed0e01d5a615f8e014d799b4a0/packages/pinia/src/store.ts#L895-L966 ,不过依然不明确问题原因。
突然灵感乍现,有新发现,我这个工程是 pnpm workspace, 两个包都依赖了 pinia,但版本不一致了。统一版本后再 build,问题解决。
那么,怎么保证不同的包的相同依赖版本一致呢?pnpm 给出了方案:https://pnpm.io/package_json#pnpmoverrides
- properties undefined reading Cannot piniaproperties undefined reading cannot properties typeerror undefined reading taro properties undefined reading typeerror undefined property cannot properties typeerror reading cannot pickalgorithm properties reading cannot clearvalidate undefined property cannot quot undefined property cannot access_token undefined property cannot parentelement properties reading cannot