vue3+pinia 打包报错 RollupError: "hasInjectionContext"

9,706 阅读1分钟
# build error
import { hasInjectionContext, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set,...
import { setupDevtoolsPlugin } from '@vue/devtools-api';
error during build:
RollupError: "hasInjectionContext" is not exported by "node_modules/vue-demi/lib/index.mjs", imported by "node_modules/pinia/dist/pinia.mjs".

pinia 中引用的 hasInjectionContextvue-demi 插件中不存在。我想这可能是由于 Vue 版本和 Pinia 版本不匹配导致的。

随后我查看了 package.json 文件。

 "pinia": "^2.0.17",
 "vue": "3.2.37",

查看 Jenkins 打包服务器中的 lock 文件。

name: pinia
version: 2.1.0

这里锁定了 Vue 的版本,但是 Pinia 没有锁定。查看了 Pinia 的更新日志,发现 2.1.0 及以上版本需要引入 Vue 3.3 及以上版本。

解决办法

  1. vue 升级到 3.3 及以上版本,将 pinia 升级到 2.1.0 及以上版本。Vue 3.3 引入了很多新的特性,特别是对泛型组件的支持。
  2. 如果无法升级到 Vue 3.3 及以上版本,可以锁定 Pinia 的版本为 2.0.36。由于某些原因,我们的项目无法升级 Vue,因此采用了这种方法。