typescript - خطا در حین اجرای nestjs در حالت تولید، ماژول یافت نشد
من یک کلاس عمومی را به شکل زیر پیادهسازی کردهام که ممکن است باعث مشکل شود،
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 });
}
}
و استفاده با سایر خدمات نهاد، مانند
@Injectable()
export class CarService extends EntityService<CarEntity> {
constructor(
@InjectRepository(CarEntity)
private carRepository: Repository<CarEntity>,
) {
super(carRepository);
}
کد با 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! [email start:prod: `node dist/main.js`
npm ERR! Exit status 1
من سعی کردهام پوشه 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"
},
پاسخ شماره ۱
من مشکل را پیدا کردهام، این به دلیل استفاده از مسیر کامل هنگام وارد کردن کلاس بود.
import { EntityService } from '../shared/service-common'; //correct way
import { EntityService } from 'src/shared/service-common'; // wrong autoimport
برای رفع واردات خودکار، من این تنظیم را در VS Code اضافه کردهام
"typescript.preferences.importModuleSpecifier": "relative"
پاسخ شماره ۲
پوشه dist را حذف کنید و دوباره با دستور npm run start:dev اجرا کنید
