node · JavaScript
報錯原文
SyntaxError: Cannot use import statement outside a module
這是什麼意思
node 或瀏覽器把那個檔案當作 CommonJS 指令碼來讀,而裡面出現了 ESM 的關鍵字 import。除非 package.json 另有宣告,.js 檔案一律按 CommonJS 讀;在瀏覽器裡,則是 <script> 標籤少了 type="module" 時出同樣的事。npm pkg set type=module 把整個套件宣告為 ESM 就能解決,但從那一刻起這個套件裡所有 .js 都失去 require 和 __dirname,剩下的 CommonJS 檔案必須一起遷移——如果只想改一個檔案,把副檔名換成 .mjs 是更小、更安全的改動。
怎麼修
npm pkg set type=module- 來自
- node
- JavaScript
- 15
瀏覽器和 node 的錯誤通常只告訴你什麼壞了,不告訴你那個值為什麼變成這樣——你讀了 undefined、它不是函式、它不是 JSON——所以該修的地方在拋錯那一行的上游;只用 ?. 和預設值把那一行按住,同樣的問題會在更遠的地方、以更難辨認的樣子回來。
怎麼讀報錯
- 從第一行往下讀。越往下越是工具內部的事,起因通常寫在最上面。
- 有檔名和行號就從那裡查——不是堆疊最上面那一格,而是最上面那條提到你自己寫的檔案的行。
- 把報錯原文照樣去搜,但先去掉你自己的路徑和變數名,正是那些讓搜尋比對不上。
- 同一種情況在不同版本裡措辭不同。結果不對頭,就把版本號一起加進查詢。
- 貼上修法之前,先確認它會丟掉什麼。這裡面有些是不能收回的。
常見問題
Q. “SyntaxError: Cannot use import statement outside a module” 是什麼意思?
node 或瀏覽器把那個檔案當作 CommonJS 指令碼來讀,而裡面出現了 ESM 的關鍵字 import。除非 package.json 另有宣告,.js 檔案一律按 CommonJS 讀;在瀏覽器裡,則是 <script> 標籤少了 type="module" 時出同樣的事。npm pkg set type=module 把整個套件宣告為 ESM 就能解決,但從那一刻起這個套件裡所有 .js 都失去 require 和 __dirname,剩下的 CommonJS 檔案必須一起遷移——如果只想改一個檔案,把副檔名換成 .mjs 是更小、更安全的改動。
Q. 怎麼修?
npm pkg set type=module —— 執行前先看上面的說明,確認這條命令會丟掉什麼。
Q. 這是哪個工具報的?
node。它屬於JavaScript,報錯原文有 8 個詞。