【问题标题】:Error while running nestjs in production mode, cannot find module在生产模式下运行nestjs时出错,找不到模块
【发布时间】:2019-05-26 13:02:24
【问题描述】:

我已经实现了一个可能导致问题的通用类,如下所示,

    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! project@0.0.0 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"
        },

【问题讨论】:

    标签: typescript nestjs


    【解决方案1】:

    我找到了问题,这是因为导入类时的绝对路径。

    import { EntityService } from '../shared/service-common'; //correct way
    
    import { EntityService } from 'src/shared/service-common'; // wrong autoimport
    

    为了修复自动导入,我在 VS Code 中添加了这个设置

    "typescript.preferences.importModuleSpecifier": "relative"
    

    【讨论】:

    • 你好,我想知道为什么我在 tsconfig.json 中添加 ` "paths": { "src/*": ["src/*"] } ` 在使用绝对导入时也会抛出错误。
    • 谢谢!很有帮助
    • 您能解释一下为什么会这样吗?非常感谢!
    • 有什么方法可以在导入时使用这个“src/..”路径?
    • 这不是一个好的解决方案,因为我想使用absolute path
    【解决方案2】:

    删除 dist 目录并再次运行: npm run start:dev

    【讨论】:

    • 非常感谢。 Nest 类似于 Angular,但有一些 Angular 没有的奇怪问题。
    【解决方案3】:

    当文件名是小写时,由于大写引用,我也看到了同样的问题:

    import { SomeClass } from './Some.class'; 
    

    但文件名为some.class.ts

    修复导入解决了错误。

    【讨论】:

      【解决方案4】:

      解决方案

      从 tsconfig.json 文件的 compilerOptions 中删除 noEmit

      【讨论】:

        【解决方案5】:

        我忘记安装 mikro-orm 所需的这两个软件包。安装解决了我的问题:

        yarn add @mikro-orm/core @mikro-orm/nestjs
        

        【讨论】:

          【解决方案6】:

          它是由大写的文件名引起的。

          Key-store.entity.ts -> key-store.entity.ts
          

          将文件名全部变为小写。

          【讨论】:

            猜你喜欢
            • 2020-01-05
            • 2020-01-24
            • 2018-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-01
            • 2020-08-02
            相关资源
            最近更新 更多