この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
私が担当している案件では、Typescript, experss, TypeORM を使って開発しています。 先日、tscコマンドした後にnodeコマンドで実行したところ以下のようなエラーが出ました。
SyntaxError: Cannot use import statement outside a module
ネットでこのエラーを検索するとモジュールシステムをcommonjsにしているのが原因なのでES Modulesに変えるとよい、という記事があったので、package.jsonに "type": "module"
を追加してみたのですが解決しませんでした。
困っていたところ同僚に TSファイルをnodeコマンドで実行しようとした際も同じエラーが出ることを教えてもらいました。調査したところ、TypeORM の設定ファイルであるormconfig.tsに原因があることが分かりました。entitiesの部分でtsファイルを指定しているところです。
module.exports = {
type: "postgres",
host: process.env.DB_HOST,
port: process.env.DB_PORT,
username: process.env.DB_USER_NAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
synchronize: false,
entities: ["src/entity/*.ts"],
};
ormconfig.tsを以下のように変更したところエラーがなくなりました。ローカルで開発している時はts-nodeで実行しているので*.ts
を読み込みます。サーバにデプロイする時はトランスパイルした Javasciript を実行するので*.js
に変えています。
module.exports = {
type: "postgres",
host: process.env.DB_HOST,
port: process.env.DB_PORT,
username: process.env.DB_USER_NAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
synchronize: false,
entities: [`src/entity/*.${process.env.ENV === "local" ? "ts" : "js"}`],
};