import Vue from 'vue' imports "different" Vue 到不同的文件

import Vue from 'vue' imports "different" Vue to different files

这个问题可能更多是关于 Webpack 和 ES6 import 而不是 Vue。

我正在编写一个 Vuex 突变,向 state 中的对象添加一个新的 mykey: []。这需要使用Vue.set(state.myobj, 'mykey', []),使新数组获得反应性。

然而,当我 import Vue from 'vue' 到我的 mutations.js 并使用 Vue.set(...) 时,它并没有解决问题(它什么都不做)。问题似乎是 Vue 与我在 main.js 文件中创建 Vue 对象时在主 js 文件中使用的 Vue 不同。

我已经确认问题与 Vue 导入到 mutations.js 的方式有关。如果我在 main.js 中写入 window.MY_VUE = Vue 然后在 mutations.js 中使用 window.MY_VUE.set(...),新数组将按预期工作,即当我推送到数组时,更改会正确反映在DOM。自然地,比较window.MY_VUE === Vue in mutations.js returns false.

我是不是做错了什么?解决问题的正确方法是什么?

注意:作为解决方法,我现在替换对象:

state.myobj = { ...state.myobj, mykey: [] }

我正在使用 Vue 2.4.2、Vuex 2.4.0 和 Webpack 2.7.0。我没有使用 Webpack 代码拆分。

我找到了直接原因。我首先注意到,在加载应用程序时,"You are running Vue in development mode." 在控制台中打印了 两次 。它们都来自 vue.runtime.esm.js:7417,但来自不同的网址。 (Webpack url,因为我是 运行 npm run dev。)我注意到我有两个 node_modules 目录(在 ./../../),并且出于某种原因 Vue从两个地方加载一次。可能我以错误的顺序安装了 npm 包。删除 node_modules 目录和 运行 npm install 再次解决了问题:现在我可以 import Vue from 'vue' in mutations.js,并且 Vue.set(...) 按预期工作。

无论如何,我仍然不完全了解实际的 npm 问题或如何不再这样做。