1. 程式人生 > >Vue Script Static file Uncaught SyntaxError: Unexpected token

Vue Script Static file Uncaught SyntaxError: Unexpected token

背景

Vue 專案 index.html 中的 script 標籤引用 static 目錄下的檔案時報錯
在這裡插入圖片描述

Uncaught SyntaxError: Unexpected token <

先貼一下程式碼:

<body>
  <div id="app"></div>

  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <script src="./static/moment.min.js"></script>
<!-- built files will be auto injected --> </body>

在這裡插入圖片描述

分析

額,其實如果不看上面那個報錯的話,還能直接發現一個很明顯的問題,就是我引用的 moment.min.js 路徑寫錯了。但是在實際的開發過程中,竟然沒有報 404 not found , 於是就沒有注意到這個低階錯誤。

排錯

事後諸葛亮,我們還是來看一下,這個問題的排查過程。

點選控制檯報錯的詳情,進入 Source
在這裡插入圖片描述
E …
看起來還是一個很頭疼的問題呢,看Source 沒用。點選 Network 看看吧:
在這裡插入圖片描述

咦… 怎麼沒有內容顯示出來。因為手賤,其實我已經將這些build 之後的檔案都發到伺服器上去了。我們看看訪問伺服器上頁面的 Network

在這裡插入圖片描述
震驚了竟然出現了 nginx 畫面之後,我懂了。因為伺服器上的靜態資源是通過nginx 來路由的,針對沒有路由到的檔案(因為我還沒有做專門的 error.html)就會顯示這個初始的 nginx welcome page 。於是我想到了肯定是因為路徑寫錯啦!

事後分析

那麼到底為什麼,因為路徑寫錯了,就顯示了
在這裡插入圖片描述

開啟 dist 資料夾中的 index.html 檔案:
在這裡插入圖片描述

這裡的html標籤不寫雙引號是 HTML5 的一個特性。如果是HTML5以前的版本,標準寫法是需要加雙引號的。不過還是加上吧,感覺這不是一個好的規範,忽略即可。

script 標籤將去請求 src=

後面跟隨的路徑的返回結果(一般是js的程式碼塊),填充到 script 標籤內。想一想下面兩個script 標籤:
在這裡插入圖片描述

而實際去請求 http://localhost:8080/static/js/moment.min.js 這個地址返回的是一段 html 程式碼,也就是
在這裡插入圖片描述

下面來模仿一下這個err, 你自己也可以試試:
在這裡插入圖片描述
再訪問一下這個頁面,你就會看到同樣的錯誤了。

在這裡插入圖片描述

最後

是個小問題,但是背後的原理一細想,還是有很多的,我們要知道為什麼錯了,以及要多一點尋找根本的耐心。

Happy Coding!