在使用 socket.io 時(shí)遇到一個(gè)看似很大的問題,花了兩個(gè)小時(shí)發(fā)現(xiàn)是一個(gè)引號(hào)引發(fā)的血案蛇尚。并不是什么技術(shù)難題芽唇,但是這次解決問題的過程給我了很大的感悟。
遇到問題要先分析其原因取劫,弄清楚其本質(zhì)匆笤。不要光想著尋求幫助,例如搜索之類的手段谱邪。log 信息中其實(shí)包含了重要的線索炮捧,不要忽視。
有句話是這么說的:遇到問題不要老是認(rèn)為是機(jī)器惦银、環(huán)境的鍋咆课,回頭看看,多半都是自己寫的程序有錯(cuò)扯俱。
問題很簡單书蚪,我在根據(jù) socket.io api 簡單引入
import io from 'socket.io-client'
只是簡單的引入,沒有任何其他的代碼迅栅。報(bào)錯(cuò):
Uncaught SyntaxError: Unexpected token :
at Object../node_modules/socket.io-client/node_modules/debug/src/browser.js (app.js:4627)
at __webpack_require__ (app.js:679)
at fn (app.js:89)
at Object.eval (url.js?5759:7)
at eval (url.js:77)
at Object../node_modules/socket.io-client/lib/url.js (app.js:4620)
at __webpack_require__ (app.js:679)
at fn (app.js:89)
at eval (index.js?0e64:6)
at Object../node_modules/socket.io-client/lib/index.js (app.js:4592)
粗略一看殊校,語法錯(cuò)誤,冒號(hào)的鍋读存。好箩艺,那么解決吧。怎么解決呢宪萄,看文檔噻艺谆,去搜索噻“萦ⅲ花了大量的時(shí)間去查文檔静汤,搜索,并沒有用〕娓回過頭來自己仔細(xì)琢磨一下藤抡。
首先,語法錯(cuò)誤抹估,看看哪里報(bào)的錯(cuò)呢缠黍?/node_modules/socket.io-client/node_modules/debug/src/browser.js (app.js:4627)
瀏覽器里看看源碼吧。
就是這里药蜻,不認(rèn)真看瓷式,不認(rèn)真想,以為是環(huán)境變量的問題语泽。又朝著環(huán)境變量的方向一頓查贸典,不思考,就是去搜索踱卵,去找原因廊驼。可是原因在哪里惋砂,就在代碼里面啊妒挎。
早就知道是冒號(hào)的鍋,冒號(hào)在哪里西饵?冒號(hào)就在這里啊饥漫,http 后面的這個(gè)冒號(hào)啊。去模塊的源碼里看看罗标,源碼是這樣子的:
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
if (!r && typeof process !== 'undefined' && 'env' in process) {
r = process.env.DEBUG;
}
再對(duì)比一下庸队,process.env就是一個(gè)對(duì)象,需要去取 DEBUG 這個(gè)環(huán)境變量嘛闯割。源碼里也寫的清清楚楚是 Object 的彻消,那么在 URL_PREFIX 應(yīng)該是一個(gè)字符串啊。這里一看就不對(duì)啊宙拉,沒有引號(hào)啊宾尚。
再去看 URL_PREFIX 在哪里定義的,這個(gè)其實(shí)不陌生啊谢澈,項(xiàng)目里 /config/prod.env.js 里
'use strict'
module.exports = {
NODE_ENV: '"production"',
URL_PREFIX: '[http://192.168.43.193:3000/'](http://192.168.43.193:3000/')
}
對(duì)比一下NODE_ENV發(fā)現(xiàn)問題了煌贴,應(yīng)該是雙重引號(hào)啊。改一下
module.exports = {
URL_PREFIX: '"[http://192.168.43.193:3000/"'](http://192.168.43.193:3000/')
}
重新 start 一下锥忿,這不是沒毛病嘛牛郑。
總結(jié)一下,就像文章開始說的敬鬓,根據(jù)log 信息淹朋,仔細(xì)想一下這個(gè)問題并不難的笙各。難的就在自己把問題想復(fù)雜了,而且不思考础芍。反思……