https://akibakokoubou.jp/2020/07/09/nodeでrestのおもちゃを検討中/ のテストデプロイにGCPの App Engineを使っていたのだが、ある時期から SyntaxError: Cannot use import statement outside a module というエラーが出だしてよく分からない状態に。
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:1054:16)
at Module._compile (internal/modules/cjs/loader.js:1102:27)
ローカル環境ではエラーは出ず、どうもロジックの話ではなく typescript, javascriptの モジュール設定関係の話のようだが、このあたりは話がややこしすぎて訳がわからない。試行錯誤とネット検索しまくりをした結果、 nest で同じ系統のエラーの話と解決が載ってた。 https://masahiro.me/2020/03/nestjs-syntaxerror-cannot-import-statment-outside-a-module/
何かソースのパス関係の話だとするとと見直したら、ああ似たような部位が。
server.ts 内
componentsScan: [
`./services/**/**.js`,
`${rootDir}/protocols/*{.ts,.js}` // passport認証関係のコンポーネント登録
],
componentsScan: [
`./services/**/**.js`,
process.env.NODE_ENV === 'production' ?
`dist/protocols/*.js` :
`${rootDir}/protocols/*{.ts,.js}` // 書き換え
],
に書き換えたら解決(distだけだとローカルで今度は正体不明な単体テストエラーに。。。)。
あと表題の件ではないが SyntaxError: Unexpected token というエラーも。
SyntaxError: Unexpected token {
at Module._compile (internal/modules/cjs/loader.js:723:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
こっちは GCP の node のバージョンが異なっていた問題だったみたい (ごく最近までApp Engineの nodeは V.10 だったらしい)
app.yaml 内
# runtime: nodejs10
runtime: nodejs12
これは気づいてみれば、ああ確かに 的な。