PHP/Vue项目无包管理工具时,如何通过CDN创建并实例化VueX Store及集成vuex-persistedstate?
解决CDN引入VueX和vuex-persistedstate的初始化问题
嘿,我懂你现在的困扰——没法用包管理器只能靠CDN确实有点折腾,不过别慌,我给你一步步梳理正确的配置方式:
第一步:把CDN脚本的加载顺序理清楚
脚本加载顺序是关键,必须按依赖关系来:先Vue,再Vuex,最后是vuex-persistedstate。你的footer.php可以调整成这样:
<!-- 先加载Vue(假设你之前没补全,这里补上Vue2的CDN) --> <script src="https://unpkg.com/vue@2/dist/vue.js"></script> <!-- 然后加载Vuex --> <script src="https://unpkg.com/vuex"></script> <!-- 最后加载vuex-persistedstate --> <script src="https://unpkg.com/vuex-persistedstate/dist/vuex-persistedstate.umd.js"></script> <!-- 注册Vuex到Vue --> <script> Vue.use(Vuex) </script>
如果你的项目用Vue3,记得换成Vue3的CDN版本,从你的代码来看应该是Vue2,所以上面的配置没问题。
第二步:正确配置Store并集成持久化插件
CDN版本的vuex-persistedstate会在全局暴露createPersistedState方法,你需要把它作为插件传入Vuex.Store的配置里。修改你的store.js:
// 初始化持久化插件,可以加一些自定义配置 const persistedStatePlugin = createPersistedState({ // 可选:指定存储在localStorage里的key,默认是vuex key: 'my-app-vuex-store', // 可选:指定只持久化特定的state字段,默认是全部 // paths: ['count'] }) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, // 把持久化插件加入plugins数组 plugins: [persistedStatePlugin] })
第三步:初始化Vue实例
你的vueInstance.js结构没问题,但要确保store.js在它之前加载(不然会出现store未定义的错误):
const app = new Vue({ el: '#app', store: store, // 这里的store就是上面定义的全局变量 // 其他组件、钩子函数等配置... })
几个关键提醒
- 脚本加载顺序绝对不能乱:Vue → VueX → vuex-persistedstate → store.js → vueInstance.js,否则会出现各种变量未定义的报错。
- CDN版本的插件不用import,直接用全局暴露的
createPersistedState就行,这和npm安装的写法不一样。 - 测试的时候可以加个按钮,点击触发
store.commit('increment'),刷新页面后如果count值没重置,就说明持久化生效了。
这样调整后应该就能正常运行啦!
内容的提问来源于stack exchange,提问作者Manzana
相关产品推荐
相关产品推荐

