nuxtjs裏面集成vuex的建立方式改變了,而且官方不建議以導出Vuex實例的方式建立store,而且會在nuxt3裏面刪除。這樣就會存在一個問題,我怎麼像普通vue spa項目同樣直接 import store from '@/store'呢?vue
雖然官方建議爲這個js寫一個plugins,而後在 plugins 裏面使用ios
export default ({ app, $axios, store, route, redirect }) => { ... }
雖然這裏面確實能夠獲取到,大多數狀況也確實該如此。可是總有那麼些異常狀況須要在單獨js裏面引用怎麼辦呢?而我也確實遇到了,由於項目以前以spa形式,後來要作平臺化,須要依賴seo,那麼只能轉爲ssr渲染。項目也不小,包含的內容很是多,總體轉爲ssr,又沒有足夠的時間週期,那麼確定是越平滑過渡越好,儘可能避免大量的改動。那麼就確實遇到了這個問題,須要在單獨js文件裏引入store及router。vuex
由於nuxt建立的 store 實例並無 exports 出來,因此無法直接 import。以前嘗試了不少方法,好比:axios
一、由於nuxt裏的vuex建立方式是將state以函數導出,getters等也是直接導出,那麼嘗試app
import { state } from '@/store/index.js'
// 用的時候就須要
state().pick
可是這種方式獲取到的值始終是null,這顯然是不對的。可能緣由在於它導出的只是這個變量,而並非這個store實例裏的這個state,因此致使獲取不到值,不知道理解是否正確。那麼繼續找方案。函數
二、網上查的:spa
能夠 hack 一下,從組件中獲取到 store 後賦值到一個地方保存起來ssr
也能夠寫一個 plugin,在 plugin 執行的時候把 store 保存起來nuxt
沒具體試過可不可行code
三、實例初始化完畢之後 nuxt 會在 window 全局注入$nuxt ,經過$nuxt.$store 能夠訪問 store,$nuxt.$router 能夠訪問到router,可是須要注意的是,初始化完畢之前是沒法訪問$nuxt的,因此須要再初始化完畢以後才能使用該方法。
const store = $nuxt.$store const router = $nuxt.$router