开始新项目与'巢新'命令。工作正常,直到我添加实体文件到它。
出现以下错误:
从“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 {}
正如Jay McDoniel在回答中所解释的,问题似乎是或mconfig中实体文件的模式匹配。json
文件:可能是从javascript文件(可能是以前传输的typescript文件)导入了一个typescript文件(模块)。
在或mconfig中删除现有的
,这样TypeORM将只加载javascript文件。实体文件的路径应相对于执行节点的工作目录。ts
glob模式就足够了。json
"entities" : [
"dist/entity/**/*.js"
],
"migrations" : [
"dist/migration/**/*.js"
],
"subscribers": [
"dist/subscriber/**/*.js"
],
在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"
}
}
然后可以运行生成命令。
我的假设是,您有一个TypeormModule
配置,其entities
属性如下所示:
entities: ['src/**/*.entity.{ts,js}']
entities: ['../**/*.entity.{ts,js}']
您遇到的错误是因为您试图在js
上下文中导入ts
文件。只要你不使用webpack,你就可以使用它来获得正确的文件
entities: [join(__dirname, '**', '*.entity.{ts,js}')]
其中从路径模块导入。现在__dirname
将解析到src
或dist
,然后分别找到预期的ts
或js
文件。
上面假设配置完成的是一个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: 我怎样才能解决这个问题?谢谢