状況
NestJS+TypeORM構成で、マイグレーションなど諸々実行した後に開発を始めようとnest start
すると以下のエラーが発生。
../src/db/migrations/1621141317805-init.ts:1
import {MigrationInterface, QueryRunner} from "typeorm";
^^^^^^
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:992:16)
at Module._compile (internal/modules/cjs/loader.js:1040:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:941:32)
at Function.Module._load (internal/modules/cjs/loader.js:782:14)
at Module.require (internal/modules/cjs/loader.js:965:19)
at require (internal/modules/cjs/helpers.js:88:18)
at .../node_modules/typeorm/util/DirectoryExportedClassesLoader.js:41:39
at Array.map (<anonymous>)
at Object.importClassesFromDirectories (.../node_modules/typeorm/util/DirectoryExportedClassesLoader.js:41:10)
ちなみにormconfig
ファイルはts
ファイルにしていて、entity
, migration
, factory
, seed
など諸々ts
ファイルにしている。
設定ファイルのファイル読み込みはこんな感じ
ormconfig.ts
entities: ['src/db/entities/**/*{.ts,.js}'],
migrations: ['src/db/migrations/**/*{.ts,.js}'],
以下を参考にjsを読み込ませるように〜
, __dirnameをつかって〜
など、色々試したが設定ファイル(ormconfig
)云々で解決する感じはなかった。
結論
$ rm -rf dist
dist
ディレクトリに過去のmigration
情報がたくさん残っていて、これらが影響を与えていたらしい。
自分がサーバー起動前にdbを初期化するときにmigration
ディレクトリごと毎回rm -rf ...
で削除してたのでdist
に過去のmigration
ファイルが溜まり続けていることに気づかなかった。
db_init
$ yarn typeorm schema:drop;
$ rm -rf src/db/migrations/*;
$ yarn yarn typeorm migration:generate -n init;
$ yarn yarn typeorm migration:run;
typeorm
周りの整備でormconfig.ts
に拡張子変えてみたり、関連ファイルいじりまくったりしていて過去のmigration
ファイルがよくわかんない状態で残っていたのだと思う。