mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-11 08:33:53 +00:00
fix: hotfix for vuex hmr (#4801)
* hotfix: Vuex HMR and warning when exporting an object for state * hotfix: Handle sub modules too * Update store.js
This commit is contained in:
parent
70775e121a
commit
5f0b34fcd4
@ -3,6 +3,7 @@ import Vuex from 'vuex'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
const log = console // on server-side, consola will catch all console.log
|
||||
const VUEX_PROPERTIES = ['state', 'getters', 'actions', 'mutations']
|
||||
let store = {}
|
||||
let fileResolver
|
||||
@ -31,7 +32,6 @@ void (function updateModules() {
|
||||
|
||||
// If store is an exported method = classic mode (deprecated)
|
||||
if (typeof store === 'function') {
|
||||
const log = (process.server ? require('consola') : console)
|
||||
return log.warn('Classic mode for store/ is deprecated and will be removed in Nuxt 3.')
|
||||
}
|
||||
|
||||
@ -97,19 +97,26 @@ export const createStore = store instanceof Function ? store : () => {
|
||||
// Dynamically require module
|
||||
function requireModule(path, { isRoot = false, isState = false } = {}) {
|
||||
const file = fileResolver(path)
|
||||
const moduleData = file.default || file
|
||||
let moduleData = file.default || file
|
||||
|
||||
if (isState && typeof moduleData !== 'function') {
|
||||
return () => moduleData
|
||||
log.warn(`${path} should export a method that returns an object`)
|
||||
const state = Object.assign({}, moduleData)
|
||||
return () => state
|
||||
}
|
||||
if (isRoot && moduleData.commit) {
|
||||
throw new Error('[nuxt] <%= dir.store %>/' + path.replace('./', '') + ' should export a method which returns a Vuex instance.')
|
||||
throw new Error('[nuxt] <%= dir.store %>/' + path.replace('./', '') + ' should export a method that returns a Vuex instance.')
|
||||
}
|
||||
|
||||
if (isRoot && typeof moduleData !== 'function') {
|
||||
// Avoid TypeError: setting a property that has only a getter when overwriting top level keys
|
||||
const state = moduleData.state && typeof moduleData.state !== 'function' ? (() => state) : moduleData.state
|
||||
return Object.assign({}, moduleData, { state })
|
||||
moduleData = Object.assign({}, moduleData)
|
||||
}
|
||||
if (moduleData.state && typeof moduleData.state !== 'function') {
|
||||
log.warn(`'state' should be a method that returns an object in ${path}`)
|
||||
const state = Object.assign({}, moduleData.state)
|
||||
// Avoid TypeError: setting a property that has only a getter when overwriting top level keys
|
||||
moduleData = Object.assign({}, moduleData, { state: () => state })
|
||||
}
|
||||
return moduleData
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user