問題表現(xiàn)[WHAT]
前段時(shí)間用vue-cli開發(fā)頁面英支,一直以來由于webpack和babel都是框架自帶的,使用的也很好烦衣,就沒有特別注意過語法方面的問題.
但是這次頁面在android 5.0及以下系統(tǒng)的模擬器上完全無法顯示钞螟,調(diào)試顯示dom未渲染拢锹,js報(bào)錯(cuò)"Unexpected strict mode reserved word"
本來這種問題很常見嘛,嚴(yán)格模式下js保留字沖突兽叮,最常見的就是命名時(shí)采用了保留字芬骄,但這次不正常啊,我開了eslint寫的代碼鹦聪,哪來的保留字沖突呢账阻?
然后是極為惡心的查壓縮代碼手動(dòng)分段調(diào)試,最后定位到“l(fā)et”關(guān)鍵字上泽本。
分析[WHY]
誒淘太,不是有babel嗎?哪來的let呢?因?yàn)閷懹衛(wèi)et的js文件是放置在static下的一個(gè)輔助腳本蒲牧,通過import導(dǎo)入撇贺,而vue-cli的webpack相關(guān)配置如下
{test:/\.js$/,loader:'babel-loader',include:[resolve('src'),resolve('test'),resolve('node_modules/webpack-dev-server/client')]}
很明顯對(duì)吧,并不編譯static下文件
那么為什么報(bào)錯(cuò)信息為“Unexpected strict mode reserved word”呢冰抢,因?yàn)閘et在es5中并不是關(guān)鍵字松嘶,無法識(shí)別,但是在嚴(yán)格模式下視為保留字挎扰,而android 5.0的webview明顯將let認(rèn)為是一個(gè)變量而不是關(guān)鍵字翠订,從而認(rèn)為采用了保留字作為變量名,故報(bào)錯(cuò)
解決方法[HOW]
通過上面的解釋遵倦,明顯可以想出來怎么解決這個(gè)問題:
方法1.將相關(guān)的需要babel編譯js文件移動(dòng)到src下尽超,同時(shí)記得修改引用的路徑【推薦】
方法2.修改build/webpack.base.conf.js下配置,將static文件夾下內(nèi)容加入babel編譯【不推薦梧躺,因?yàn)閟tatic下應(yīng)該就是放靜態(tài)文件的】