你们好,我是金金金。
场景
- 我这里是
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
版本对应的话,那么也不会出现这个问题。
- 编写有误还请大佬指正,万分感谢。