解決Failed to parse SourceMap: http:xxx 問題


解決Failed to parse SourceMap: http:xxx 問題

一、總結

一句話總結:

直接在chrome瀏覽器中簡單粗暴關閉掉js source maps(按f12進入控制台,然后再按f1進入setting),問題可以解決,更加好的方法是查看控制台的錯誤提示,找到錯誤來源,比如我當前的錯誤來源就是chrome上面的廣告攔截插件adblock的問題

 

1、source map是什么?

SourceMap就是如何把壓縮后的js代碼映射成格式化代碼的方法

 

2、source map出現的原因是什么?

壓縮js或css加快網站速度,壓縮之后不便調試,source map就是如何把壓縮后的js代碼映射成格式化代碼的方法

在現在寫網站的時候,如果有很多的javascript文件,拿ASP.NET NVC來說,在渲染內容到客戶端瀏覽器的時候,如果你使用一些Bundle類的話,能夠合並並且壓縮那些js文件,並且去除其中的空格等元素,從而減小文件的容量,提高網頁的反應速度。但是這樣一樣造成的問題就是在瀏覽器端無法對js文件進行調試,因為進過壓縮的文件很緊湊,沒有空格與換行。

 

3、chrome瀏覽器中如何設置js的SourceMap?

按f12進入控制台,然后再按f1進入setting,然后就可以看到設置js和css的source map

 

 

4、source map工作原理?

在對已有的js文件進行壓縮時,壓縮的同時會產生相應的sourcemap文件,通過source map文件可以將壓縮的js還原。現在最常用的是Closure compiler,在工具產生壓縮js文件之后,會在文件頭部加上這樣一行代碼,指明了服務器上的哪個文件是map文件。

 

 

二、解決Failed to parse SourceMap: http:xxx 問題

轉自或參考:解決Failed to parse SourceMap: http:xxx 問題_網絡_寫代碼的蝸牛-CSDN博客
https://blog.csdn.net/sundacheng1989/article/details/51118865

 

最近在調試web網站的時候,看到Chrome的Dev Tool的控制台打印出來一個莫名的錯誤,類似於Failed to parse SourceMap: http:xxx的提示。感覺這應該不是javascript代碼出的問題,於是Google一下,發現里面大有文章。

 

這里簡單說一下SourceMap這項技術。在現在寫網站的時候,如果有很多的javascript文件,拿ASP.NET NVC來說,在渲染內容到客戶端瀏覽器的時候,如果你使用一些Bundle類的話,能夠合並並且壓縮那些js文件,並且去除其中的空格等元素,從而減小文件的容量,提高網頁的反應速度。但是這樣一樣造成的問題就是在瀏覽器端無法對js文件進行調試,因為進過壓縮的文件很緊湊,沒有空格與換行。

 

這里先說一個額外的話題,就是怎么把壓縮后的js文件還原成格式化的代碼。這里有一個在線的工具就可以完成。http://jsbeautifier.org/,打開網址后,輸入壓縮后的js代碼,然后點擊Ctrl+Enter,自動就給你格式化了,很方便。

 

上邊說到的是如何格式化,就是把代碼拷貝出來進行格式化,跟調試還不一樣。想在調試的時候能在瀏覽器端顯示格式化的js代碼,這里就引入了SourceMap的概念。

 

概括來講,SourceMap就是如何把壓縮后的js代碼映射成格式化代碼的方法。當你在Production環境部署代碼的時候,伴隨着壓縮與優化話的js代碼,還要有一個包含原始js代碼的sourcemap文件。當客戶端瀏覽器Chrome在收到這個壓縮后的js文件后,它會自動的去尋找服務器上相關的sourcmap文件並把壓縮的js代碼轉換成格式規范的js代碼。

 

Chrome要實現這個功能,首先要開啟這個設置。在Dev Tool的設置框中,勾選相應的項。注意,不是Chrome的設置頁面,是DevTool的設置頁面。

按f12打開控制台,然后按f1即可進入

 

這里來說一說SourceMap到底是怎么工作的。首先我們要有相應的工具對已有的js文件進行壓縮,壓縮的同時會產生相應的sourcemap文件,然后再部署到服務器就可以了。目前不是所有的壓縮工具都符合要求,比如說ASP.NET MVC里邊的那個Bundle類就不可以。現在最常用的是Closure compiler,在工具產生壓縮js文件之后,會在文件頭部加上這樣一行代碼,指明了服務器上的哪個文件是map文件。這個文件只有在瀏覽器打開了上邊提到的DevTool里邊SourceMap的設置,才會下載到本地,否則不會下載。這里就顯示出了其優勢,一般用戶不用下載,其網頁只用優化后的js文件,響應速度快。對於開發者,發者可以下載map文件進行調試。

 

 

現在回到最初的問題,為什么我的網站會拋出那個異常?

 

 

看提示可以明白,是因為網站引用的第三方的angular是壓縮后的版本,而且有sourcemap的指向信息,而我的網站沒有相應的map文件,所以拋出此異常。

 

 

參考:

http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

http://stackoverflow.com/questions/36051891/esri-failed-to-parse-source-map

 
 

三、source map實例

 

錯誤原因:

無論是圖標還是提示都發現是chrome廣告攔截插件adblock的問題

 

 

 

 

 

 

四、chrome中設置開啟和關閉source map

按f12進入控制台

 

 

再按f1進入 setting

 

 

 

 

 

 

 

 

 
 
 
 


免責聲明!

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



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