Vue生產環境調試的方法


vue 生產環境默認是無法啟用vue devtools的,如果生產應用出了問題,就很難解決。用本文提供的方法就可以實現線上debug vue,也不需要在瀏覽器上打斷點。

原理

先說下vue如何判斷devtools是否可用的。

vue devtools擴展組件會在window全局注入__VUE_DEVTOOLS_GLOBAL_HOOK__變量,Vue就是根據這個變量判斷是否需要調試的。

 

vue根實例初始化之前判斷Vue.config.devtools是否為true。若為true,

則調用window.__VUE_DEVTOOLS_GLOBAL_HOOK__.emit('init', Vue)方法初始化調試面板。

本方法的原理都寫在代碼的注釋當中

 

方法步驟

1.復制下面的js代碼,按F12 粘貼到控制台執行

2.關閉控制台,再打開控制台 就能看到Vue面板了

 

 

 

代碼和插件已經上傳到github

https://github.com/xcr1234/vue-devtools-production
復制dist/main.js的內容粘貼到控制台
如果Github打不開的可以去碼雲:https://gitee.com/ironV/vue-devtools-production

代碼(Vue2)
function openVueTool(){
//在方法中執行,避免污染全局變量
//開啟vue2 production調試的方法

//1.找vue實例,可以說99%的應用是用的app.__vue__
//如果實在找不到,那么就到找到任意組件,用組件元素.__vue__.$root來獲取
var vue = app.__vue__


//2.vue構造函數
var constructor = vue.__proto__.constructor


//3.Vue有多級,要找到最頂級的
var Vue = constructor;
while(Vue.super){
    Vue = Vue.super
}
console.log(Vue)

//4.找到config,並且把devtools設置成true
Vue.config.devtools = true;



//5.注冊到Vue DevTool上
var hook = window.__VUE_DEVTOOLS_GLOBAL_HOOK__
hook.emit('init',Vue)




//6.如果有vuex store,也注冊//這部分代碼參考了https://blog.csdn.net/weixin_34352449/article/details/91466542
if(vue.$store){
    var store = vue.$store;
    store._devtoolHook = hook;
    hook.emit('vuex:init', store);
    hook.on('vuex:travel-to-state',function(targetState){
        store.replaceState(targetState);
    });
    store.subscribe(function(mutation, state){
        hook.emit('vuex:mutation', mutation, state);
    });
}

}

openVueTool();
代碼(Vue3)
var vue = app.__vue_app__
const hook = window['__VUE_DEVTOOLS_GLOBAL_HOOK__']
hook.emit('app:init',vue,vue.version,{
        Fragment: 'Fragment',
        Text: 'Text',
        Comment: 'Comment',
        Static: 'Static'
})
View Code

 


缺點

這個方法只是對當前標簽頁有效,就是說,如果你不小心(出於習慣)刷新了一下頁面,或者有新標簽頁打開其他路由的需求,就需要重新走一遍上面的步驟。

長期解決方法

在瀏覽器安裝Tampermonkey插件,推薦用edge瀏覽器

安裝后去greasyfork安裝插件

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM