运行nestjs应用程序时typeorm迁移中的“不能在模块外使用import语句”

Posted

技术标签:

【中文标题】运行nestjs应用程序时typeorm迁移中的“不能在模块外使用import语句”【英文标题】:"Cannot use import statement outside a module" in typeorm migration when run nestjs app 【发布时间】:2020-07-30 06:10:49 【问题描述】:

我已经创建了 nestjs 应用程序。在根应用程序文件夹中,我有这些子文件夹:

分布 迁移 源代码 测试

迁移文件夹包含 typeorm 迁移。 使用 npm run start:dev 运行应用程序时出现此错误:

import MigrationInterface, QueryRunner from "typeorm";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Module._compile (internal/modules/cjs/loader.js:891:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Module.require (internal/modules/cjs/loader.js:848:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Function.PlatformTools.load (C:\Users\dakru1\Documents\employo\employo-api\node_modules\typeorm\platform\PlatformTools.js:114:28)
    at C:\Users\dakru1\Documents\employo\employo-api\node_modules\typeorm\util\DirectoryExportedClassesLoader.js:39:69
    at Array.map (<anonymous>)
    at Object.importClassesFromDirectories (C:\Users\dakru1\Documents\employo\employo-api\node_modules\typeorm\util\DirectoryExportedClassesLoader.js:39:10)

我了解错误消息,并且知道如何解决与应用程序代码相关的错误消息。

但是,我的问题是这个错误来自 typeorm 迁移文件:[app-root-folder]\migration\1587067680466-Init.ts,应用程序运行时不应该使用它。

为什么nestjs 使用迁移文件。运行nestjs应用程序时如何忽略迁移文件夹?

【问题讨论】:

这能回答你的问题吗? TypeORM Entity in NESTJS - Cannot use import statement outside a module 【参考方案1】:

要解决它,只需将以下代码放在 package.json 的“脚本”中:

"typeorm": "ts-node-dev ./node_modules/typeorm/cli.js",

之后,您将能够运行 typeorm 迁移:运行 :)

【讨论】:

【参考方案2】:

我遇到了同样的问题。我做了以下解决方法:

    设置您的 ormconfig.json 以查找仅具有 js 后缀的迁移文件:"migrations": ["migrations/*.js"], 全局安装打字稿:npm install -g typescript 生成迁移后,使用 typescript 命令将 typescript 文件转换为 javascript 文件:tsc migrations/migration-file.ts 运行您的迁移:npm run typeorm migration:run 您现在可以运行您的应用程序:npm run start:dev

【讨论】:

这是最佳答案,但不要这样做。查看 Tiago 的答案。 @Gus 你能详细说明为什么我们不应该这样做吗? 它有很多问题:它在 TypeScript 上中断(因为 .ts -> .js 更改),需要全局安装包,需要更多步骤等。

以上是关于运行nestjs应用程序时typeorm迁移中的“不能在模块外使用import语句”的主要内容,如果未能解决你的问题,请参考以下文章

播种时NestJS中的TypeOrm:RepositoryNotFoundError

迁移文件中的 NestJS TypeORM 语法错误

使用 TypeORM 和 NestJs 和 Typescript 创建新迁移时出错 [关闭]

使用 NestJS 和 TypeORM 为项目生成迁移文件

Azure 静态 Web 应用 API 中的 TypeORM 迁移

如何在 Nestjs 中使用 .env 文件设置 Typeorm 的配置