最近遇到幾份程式是從 Windows 專案移過來的,我在 Build 完 Docker 後執行發現它會提示以下錯誤
/usr/src/app/bin/https:1 #!/usr/bin/env node ^ SyntaxError: Invalid or unexpected token Object.compileFunction (node:vm:352:18) wrapSafe (node:internal/modules/cjs/loader:1033:15) Module._compile (node:internal/modules/cjs/loader:1069:27) Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10) Module.load (node:internal/modules/cjs/loader:981:32) Function.Module._load (node:internal/modules/cjs/loader:822:12) Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
問題原因
發生這個問題主要是因為它在 Windows 的編碼是使用一種叫做 UTF-8 with BOM 的編碼格式,這種格式直接 Build 進去 Docker 會發生錯誤,所以需要把它轉變成正常的 UTF-8 格式。
使用 VS Code 開發的解決方法
如果是使用 VS Code 開發其實右下角可以直接點擊右下角的 UTF-8 with BOM 然後點選 Save with Encoding 再點擊 UTF-8 就可以把這個檔案轉成 UTF-8 格式了
大量轉編碼需求解決方法
不過如果你有大量的檔案或是一整個專案需要轉碼那這個功能大概會轉到瘋掉,這時候就可以依靠一個叫做 dos2unix 的程式來實現大量檔案的轉碼
在 Mac 下安裝只要直接使用 brew 就可以直接安裝
brew install dos2unix
安裝後搭配 find
指令就可以讓指令掃描所有檔案並且轉碼了
find . -type f -print0 | xargs -0 dos2unix
參考資料
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!