你们好,我是金金金。
场景
- 我这里是
uniapp
+vue3
编写的一个小程序项目,在集成pinia
过程傍边遇到此问题,报错请求的模块 未供给 导出名hasInjectionContext
(坐落 pinia.mjs:6:10)
以下我项目傍边vue和pinia的详细依靠版别
- 这里插一条常识:package.json里边依靠包标识符~、^、以及不指定分别都代表什么意义,非常重要!!!
package.json里边依靠包标识符意义
- ^2.0.27:指定的版别范围答应进行向后兼容的更新,包括小版别和非必须版别的更新,但主版别号不变
- 假如一个依靠项的版别为
^2.0.27
,那么在装置时,能够承受任何2.x.x
版别的更新,但不承受3.0.0
或更高版别的更新。例如,^2.0.27
答应装置2.2.27
,2.3.27
,2.5.27等
,但不答应装置3.0.0
- 假如一个依靠项的版别为
- ~2.0.27:指定的版别范围答应进行小版别的更新,但坚持主版别号不变
- 假如一个依靠项的版别为
~2.0.27
,那么在装置时,能够承受任何2.0.x
版别的更新,但不承受2.1.0
或更高版别的更新。例如,~2.0.27
答应装置2.0.37
,2.0.5
等,但不答应装置2.1.0
- 假如一个依靠项的版别为
- 2.0.27:指定什么版别详细便是什么版别
- 便是2.0.27
排查
- 依靠装置的详细版别
由于我前面加了^所以版别在pnpm i的也就更新了~
- vue:3.4.21
- pinia:2.1.7
进入正题,从报错信息能看出来和pinia相关,咱们来到更新日志看下是否是依靠兼容问题
- 这里能够看到,
pinia2.1.0
要求vue版别 >=3.3.0
,vue-demi
也需求 >=0.14.5
,我的vue
版别是满意的,vue-demi
(用于供给Vue 2
兼容性的东西库)的版别也满意,vue3
内置了这个东西库。
- 我就纳闷了,依靠也能对上啊,为什么仍是报错,在此期间又多次在网上寻找相关问题等解决方法,看到一篇帖子说是
uniapp
的锅,我惊了。我先贴张图片,我也不清楚是不是这里影响的。
- 随后我来到
package.json
,点击进去
- 纳尼,这里依靠了
vue
版别是3.2.47
的,可能是被uniapp
所依靠的版别影响到了,咱们知道pinia``2.1.0
以上需求vue
版别是3.3.0
及以上的,但是这个咱们又是修改不了的,那么咱们只有下降pinia
的版别了,降到2.1.0
以下供支撑3.3.0
以下vue
版别即可。
造成error的原因
-
uniapp
所依靠的vue
版别 导致依靠不兼容所导致
解决
- 下降
pinia
版别,咱们指定装置详细的pinia
版别为2.0.27
测试
- 成功运转无报错
深究
- 上面既然说了原因是
uniapp
的锅,我创了一个不是uniapp
项目来验证
- package.json
- 咱们来运转看下是否会报错,上面这个情况
uniapp
项目是已经报错了
成功运转。无报错!再次验证是
uniapp
所依靠的vue
版别所导致。
总结
uniapp
所依靠的vue
版别 和 装置的pinia
所需求的vue
版别对应不上导致报错,由于我是uniapp
项目 只能自降pinia
版别,假如不是uniapp
项目,vue
版别和pinia
版别对应的话,那么也不会出现这个问题。
- 编写有误还请大佬指正,万分感谢。