我实现了以下通用类,这可能会引起问题,
import { Logger } from '@nestjs/common';
import { PaginationOptionsInterface, Pagination } from './paginate';
import { Repository } from 'typeorm';
export class EntityService<T> {
private repository: Repository<T>;
constructor(repository) {
this.repository = repository;
}
async getEntityWithPagination(
options: PaginationOptionsInterface,
): Promise<Pagination<T>> {
const [results, total] = await this.repository.findAndCount({
take: options.limit,
skip: (options.page - 1) * options.limit,
});
return new Pagination<T>({ results, total });
}
}
Run Code Online (Sandbox Code Playgroud)
并与其他实体服务一起使用,例如
@Injectable()
export class CarService extends EntityService<CarEntity> {
constructor(
@InjectRepository(CarEntity)
private carRepository: Repository<CarEntity>,
) {
super(carRepository);
}
Run Code Online (Sandbox Code Playgroud)
该代码可以正常运行,npm run start:dev但是在尝试与生产一起运行时抛出以下错误npm run start:prod
internal/modules/cjs/loader.js:582
throw err;
^
Error: Cannot find module 'src/shared/entity.service'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
at Function.Module._load (internal/modules/cjs/loader.js:506:25)
at Module.require (internal/modules/cjs/loader.js:636:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/tejas/Code/web/project/dist/car/car.service.js:27:26)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! project@0.0.0 start:prod: `node dist/main.js`
npm ERR! Exit status 1
Run Code Online (Sandbox Code Playgroud)
我曾尝试删除dist文件夹,但仍然没有运气。我也尝试过更新软件包,package.json如下。我不知道如何调试它。
dependencies": {
"@nestjs/common": "^5.5.0",
"@nestjs/core": "^5.5.0",
"@nestjs/jwt": "^0.2.1",
"@nestjs/passport": "^5.1.0",
"@nestjs/typeorm": "^5.2.2",
"bcryptjs": "^2.4.3",
"glob": "^7.1.3",
"passport": "^0.4.0",
"passport-http-bearer": "^1.0.1",
"passport-jwt": "^4.0.0",
"pg": "^7.7.1",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.2.2",
"typeorm": "^0.2.9",
"typescript": "^3.2.2"
},
"devDependencies": {
"@nestjs/testing": "^5.5.0",
"@types/express": "^4.16.0",
"@types/jest": "^23.3.1",
"@types/node": "^10.12.18",
"@types/supertest": "^2.0.7",
"jest": "^23.5.0",
"nodemon": "^1.18.9",
"prettier": "^1.14.2",
"supertest": "^3.1.0",
"ts-jest": "^23.1.3",
"ts-loader": "^4.4.2",
"ts-node": "^7.0.1",
"tsconfig-paths": "^3.5.0",
"tslint": "5.11.0",
"webpack": "^4.28.2",
"webpack-cli": "^3.1.2",
"webpack-node-externals": "^1.7.2"
},
Run Code Online (Sandbox Code Playgroud)
Tej*_*jas 24
我发现了问题,这是由于导入类时的绝对路径。
import { EntityService } from '../shared/service-common'; //correct way
import { EntityService } from 'src/shared/service-common'; // wrong autoimport
Run Code Online (Sandbox Code Playgroud)
为了修复自动导入,我在VS Code中添加了此设置
"typescript.preferences.importModuleSpecifier": "relative"
Run Code Online (Sandbox Code Playgroud)
小智 5
当文件名是小写时,由于大写引用,我也看到了同样的问题:
import { SomeClass } from './Some.class';
Run Code Online (Sandbox Code Playgroud)
但该文件被命名为some.class.ts
修复导入解决了该错误。
我认为值得一提的是,在 src 文件夹之外放置 js/ts 文件(导入模块)可能会在运行时导致问题start:prod
我有一个seed.ts,用于使用 Prisma ORM 播种到我的数据库,我将其移至 src 文件夹内并解决了问题。
只需确保您的脚本指向 dist 文件夹内的 main.js 即可。
"start:prod": "node dist/src/main"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2965 次 |
| 最近记录: |