diff --git a/src/store.js b/src/store.js index b5b083c92..5cb2ff5b3 100644 --- a/src/store.js +++ b/src/store.js @@ -282,6 +282,13 @@ function installModule (store, rootState, path, module, hot) { const parentState = getNestedState(rootState, path.slice(0, -1)) const moduleName = path[path.length - 1] store._withCommit(() => { + if (process.env.NODE_ENV !== 'production') { + if (moduleName in parentState) { + console.warn( + `[vuex] state field "${moduleName}" was overridden by a module with the same name` + ) + } + } Vue.set(parentState, moduleName, module.state) }) } diff --git a/test/unit/modules.spec.js b/test/unit/modules.spec.js index bc8fa2247..8ba9d24fc 100644 --- a/test/unit/modules.spec.js +++ b/test/unit/modules.spec.js @@ -547,6 +547,24 @@ describe('Modules', () => { store.dispatch('parent/test') }) + it('module: warn when module overrides state', () => { + spyOn(console, 'warn') + const store = new Vuex.Store({ + state () { + return { value: 1 } + }, + modules: { + value: { + state: () => 2 + } + } + }) + expect(store.state.value).toBe(2) + expect(console.warn).toHaveBeenCalledWith( + `[vuex] state field "value" was overridden by a module with the same name` + ) + }) + it('dispatching multiple actions in different modules', done => { const store = new Vuex.Store({ modules: {