Vue 熱更新成功搏明,但瀏覽器不刷新

最近在更新個人主頁,這個主題看夠了闪檬,就想換另一個星著。但是今天突然發(fā)現(xiàn)我的 Vue 不能熱更新?費了一會勁才搞明白怎么回事粗悯。下面就分享一下我的入坑虚循,出坑過程吧。

webpack-dev-server 炸了样傍?

一開始我還真的以為是 HMR 不工作了横缔,所以這里陷入了一個大坑,這里省略 1 個小時的搜索铭乾。剪廉。。

后面細心我的發(fā)現(xiàn)改了代碼后炕檩,命令行是有顯示在編譯的斗蒋。

嗯捌斧。。泉沾。說明熱更新是沒問題捞蚂,可能是更新,但是更新到瀏覽器這一步不行了跷究,或者說 webpack-dev-server 沒有真正地通知到瀏覽器姓迅,所以沒有刷新。

然后又搜了一波“Vue 瀏覽器無法正常刷新”俊马,這里省略1小時的糾結(jié)丁存。。柴我。

sockjs-node

后面無聊點開了 Network 看到下面的報錯:

好奇點開這個請求詳情:

這里我關注了到了 Request URL: http://172.20.10.2:8080/sockjs-node/info?t=1590456177387解寝。這里有 "sockjs" 字眼,嗯艘儒,sock聋伦?socket !=缯觥觉增!!(此時應該有BGM)

我可以合理地提出自己的一個猜想:webpack-dev-server 和瀏覽器應該是一個雙工的過程。因為第一次連接沒有連接上翻斟,瀏覽器就根本沒有在監(jiān)聽 webpack-dev-server逾礁,所以代碼改了,瀏覽器并沒不知道访惜!

為了驗證我的猜想敞斋,我查了下這個請求,發(fā)現(xiàn)了 sockjs-node 這個庫疾牲,https://github.com/sockjs/sockjs-node植捎,果然是一個 websocket 的東西。同時阳柔,我還查了很多中文的垃圾博客焰枢,為什么要說垃圾,因為抄襲舌剂。

回到問題本身济锄,根據(jù)上面的這些博客,可以知道 sockjs-node 是一個:

首先霍转,sockjs-node是何方神圣荐绝?不難查出,sockjs-node是一個JavaScript庫避消,提供跨瀏覽器JavaScript的API低滩,創(chuàng)建了一個低延遲召夹、全雙工的瀏覽器和web服務器之間通信通道。 —— 來自各種抄襲博客

那問題就變簡單了恕沫,只要搞清楚為什么不能響應這個請求就好了监憎。

都是 VPN 的鍋

因為在查資料和嘗試各路方法的時候,我總會不斷重啟我的 Vue 項目婶溯。然后有一次鲸阔,瀏覽器竟然可以自動刷新了。此時的我還清楚地記得我在重啟前把 VPN 關了迄委,因為之前要裝個 npm 包褐筛。

然后我嘗試了幾次,只要開 VPN 就炸叙身,關了 VPN 就成功了死讹。所以這次我搜索的內(nèi)容變成了 “Vue 熱更新 VPN”,搜了幾次發(fā)現(xiàn)了這篇文章:https://blog.csdn.net/gulang03/article/details/89217273

里面遇到的就是我的問題曲梗,這里總結(jié)一下,因為這個 Request 的地址是局域網(wǎng)的地址妓忍,而我用了 VPN 代理虏两,它就會當成是 public address 去請求。一個是局域的世剖,一個 public address 定罢,那肯定是無法響應的嘛。

OK旁瘫,到此為止祖凫,其實已經(jīng)有兩種解決方法了:

  1. 把當前 IP 加到 VPN 的 exclude list
  2. 每次項目重啟的時候,把 VPN 關了酬凳。之后是可以再次打開的惠况,因為只要第一次 websocket 連接成功后,后面就可以正常通信了宁仔。不過稠屠,刷新就不行了,因為每次刷新又得創(chuàng)建連接翎苫。

修改 host

仔細想想权埠,問題不就是因為他用了 public address 所以無法建立連接么?那為什么不直接把 http://172.20.10.2:8080/sockjs-node/info?t=1590456177387
改成 http://localhost:8080/sockjs-node/info?t=1590456177387煎谍。別用 172.20.10.2攘蔽,用 localhost 唄,這肯定是能訪問到本機的呀呐粘。

所以我又開始搜索 “Vue How to change sockjs-node host”满俗,搜出了兩遍比較好的 Github Issue转捕。

第一篇 https://github.com/gtalarico/django-vue-template/issues/5 和我的問題有的類似,也是上面這個請求無法訪問了漫雷。不過他好像是 Django 的問題瓜富。但是上面給的方法是可以解決的。

在 package.json 改成 "server": "vue-cli-service serve --host 127.0.0.1 --port 8080"降盹。這樣 host 就是 127.0.0.0 訪問的就是本機了与柑。

另一篇 https://github.com/vuejs/vue-cli/issues/1525 說的就是 Vue 這個 cli 的 websocket 就是連不上,怎么修改 Host 的蓄坏。這里的解決方法也差不多价捧。

在 vue.config.js 里添加 devServer 的配置:

module.exports = {
  ...
  devServer: {
    host: '0.0.0.0',
    public: '0.0.0.0:8080',
    disableHostCheck: true
  }
}

這樣訪問的還是本機,websocket 也是可以成功建立的涡戳。

但是结蟋,這里也有不好的地方,它改了 Network渔彰。你可能會問嵌屎,改了 Network 怎么了?先看看原來是怎么樣的:

一個是本地的地址恍涂,一個是公開的地址宝惰,有了公開的地址就可以在手機里調(diào)試呀。不然每次都要 ifconfig 去找本機的 IP再沧,好麻煩尼夺。而且別人看到你提交的代碼可能會過來找你。

總強

總結(jié)一下炒瘸,問題其實就是因為開了代理淤堵,代理以為你的局域網(wǎng)地址是 public address,所以并不能得到響應顷扩。因此 webpack-dev-server 和瀏覽器的雙工通信沒有成功連接拐邪,瀏覽器就無法監(jiān)聽到 webpack-dev-server 的熱更新。最后瀏覽器就變成了憨憨隘截。

解決方法有下面幾種:

  1. 每次開 Vue 項目時候庙睡,先關了 VPN。等項目啟動了再開 VPN技俐,因為雙工通信只要第一次連接好了乘陪,后面就能正常通信了,VPN 再也不會搗亂雕擂。缺點是不能刷新啡邑,一刷新又會發(fā) Request了。
  2. 把當前 IP 地址加到 VPN 的 exclude list井赌。這樣就還是會訪問局域地址谤逼,不會以為它是 public addresss贵扰。
  3. 修改請求的 Host:
    3.1 可以在 package.json 里改成 "server": "vue-cli-service serve --host 127.0.0.1 --port 8080"
    3.2 或者在 vue.config.js 里添加
module.exports = {
  ...
  devServer: {
    host: '0.0.0.0',
    public: '0.0.0.0:8080',
    disableHostCheck: true
  }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末流部,一起剝皮案震驚了整個濱河市戚绕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枝冀,老刑警劉巖舞丛,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異果漾,居然都是意外死亡球切,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門绒障,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吨凑,“玉大人,你說我怎么就攤上這事户辱⊥叶郏” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵庐镐,是天一觀的道長恩商。 經(jīng)常有香客問我,道長焚鹊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任韧献,我火速辦了婚禮末患,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锤窑。我一直安慰自己璧针,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布渊啰。 她就那樣靜靜地躺著探橱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绘证。 梳的紋絲不亂的頭發(fā)上隧膏,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音嚷那,去河邊找鬼胞枕。 笑死,一個胖子當著我的面吹牛魏宽,可吹牛的內(nèi)容都是我干的腐泻。 我是一名探鬼主播决乎,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼派桩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吻商,失蹤者是張志新(化名)和其女友劉穎滔灶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸭津,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡彤侍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逆趋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盏阶。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闻书,靈堂內(nèi)的尸體忽然破棺而出名斟,到底是詐尸還是另有隱情,我是刑警寧澤魄眉,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布砰盐,位于F島的核電站,受9級特大地震影響坑律,放射性物質(zhì)發(fā)生泄漏岩梳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一晃择、第九天 我趴在偏房一處隱蔽的房頂上張望冀值。 院中可真熱鬧,春花似錦宫屠、人聲如沸列疗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抵栈。三九已至,卻和暖如春坤次,著一層夾襖步出監(jiān)牢的瞬間古劲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工缰猴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绢慢,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像胰舆,于是被迫代替她去往敵國和親骚露。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容