当前位置: 首页 > 知识库问答 >
问题:

NESTJS中的TypeORM实体-无法在模块外使用导入语句

周云
2023-03-14

开始新项目与'巢新'命令。工作正常,直到我添加实体文件到它。

出现以下错误:

从“typeorm”导入{Entity,Column,PrimaryGeneratedColumn};

^^^^^^

无法在模块外使用导入语句

我错过了什么?

添加实体到模块:

import { Module } from '@nestjs/common';
import { BooksController } from './books.controller';
import { BooksService } from './books.service';
import { BookEntity } from './book.entity';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [TypeOrmModule.forFeature([BookEntity])],
  controllers: [BooksController],
  providers: [BooksService],
})
export class BooksModule {}

应用程序。单元ts:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';
import { BooksModule } from './books/books.module';

@Module({
  imports: [TypeOrmModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

共有3个答案

锺离正祥
2023-03-14

正如Jay McDoniel在回答中所解释的,问题似乎是或mconfig中实体文件的模式匹配。json文件:可能是从javascript文件(可能是以前传输的typescript文件)导入了一个typescript文件(模块)。

或mconfig中删除现有的tsglob模式就足够了。json,这样TypeORM将只加载javascript文件。实体文件的路径应相对于执行节点的工作目录。

   "entities"   : [
      "dist/entity/**/*.js"
   ],
   "migrations" : [
      "dist/migration/**/*.js"
   ],
   "subscribers": [
      "dist/subscriber/**/*.js"
   ],
翟聪
2023-03-14

在TypeForm文档中,我找到了Typescript的一个特定部分。

这一节说:

全局安装ts节点:

npm install -g ts-node

在包的脚本部分下添加typeorm命令。json

"scripts" {
    ...
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"    
}

然后可以按如下方式运行命令:

npm run typeorm migration:run

若您需要将带破折号的参数传递给npm脚本,则需要将它们添加到--。例如,如果需要生成,命令如下:

npm run typeorm migration:generate -- -n migrationNameHere

这适用于我的文件配置:

{
    "type": "postgres",
    "host": "yourhost",
    "port": 5423,
    "username": "username",
    "password": "password",
    "database": "your_db",
    "synchronize": true,
    "entities": [
        "src/modules/**/*.entity.{ts,js}"
    ],
    "migrations": [
        "src/migrations/**/*.{ts,js}"
    ],
    "cli": {
        "entitiesDir": "src/modules",
        "migrationsDir": "src/migrations"
    }
}

然后可以运行生成命令。

谯振国
2023-03-14

我的假设是,您有一个TypeormModule配置,其entities属性如下所示:

entities: ['src/**/*.entity.{ts,js}']
entities: ['../**/*.entity.{ts,js}']

您遇到的错误是因为您试图在js上下文中导入ts文件。只要你不使用webpack,你就可以使用它来获得正确的文件

entities: [join(__dirname, '**', '*.entity.{ts,js}')]

其中从路径模块导入。现在__dirname将解析到srcdist,然后分别找到预期的tsjs文件。

上面假设配置完成的是一个javascript兼容文件(. js或在TypeymModule.forRoot()传递的参数)。如果使用ormconfig.json,则应使用

entities: ["dist/**/*.entity.js"]

因此,您使用的是已编译的js文件,而没有机会在代码中使用ts文件。

 类似资料:
  • 我有一本书。节点js(07.10.19版本的node.js的最新版本)应用程序中的ts文件,带有导入节点模块而无默认导出。我使用这种结构:

  • 我有一个ApolloServer项目给我带来了麻烦,所以我想我可能会更新它,并在使用最新的巴别塔时遇到问题。我的“index.js”是: 当我运行它时,我得到了错误 首先,我试图做一些事情来说服TPTB*这是一个模块(没有成功)。所以我把“导入”改成了“要求”,这就奏效了。 但是现在我在其他文件中有大约24个“导入”给我同样的错误。 *我确信我的问题的根源是我甚至不确定是什么在抱怨这个问题。我有点

  • 试图将用户模型中的“uuid”作为

  • 提前感谢您的帮助。 这个问题似乎已经在其他地方被提出和回答,但我相信我已经尝试了所有这些解决方案,但没有取得真正的进展。 我试图为webdriverIO创建一个自定义记者。然而,当所有导入都运行时,我得到以下错误: 无法在模块外使用导入语句 如果我试图执行文件顶部的导入语句,则会在导入WebdriverTestrasER行上出现上述错误。我可以通过使用要求来解决这个问题,但是在从@wdio/记者导

  • 在测试其中一个功能时,我遇到了这种错误。到底是什么问题? /用户/user/websprojects/hsu/src/path finding/path finding。spec.js:1从'chai'导入{expect}^^^^^^ 语法错误:无法在WrapSafe(节点:内部/模块/cjs/加载器: 1018:16)的模块外使用导入语句。_compile(节点:内部/模块/cjs/加载器: 1

  • 我得到了这个错误时,试图从另一个javascript文件导入。这是我第一次尝试这样的东西。主文件是,模块文件是。 main.js: 摩登派青年js: 我怎样才能解决这个问题?谢谢