gpt4 book ai didi

node.js - sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块

转载 作者:行者123 更新时间:2023-12-03 22:26:23 27 4
gpt4 key购买 nike

我正在设置 sequelize-typescript然后添加模型:

    import appRoot from 'app-root-path'

connection = new Sequelize({... connection details})
const appGlobPattern = join(appRoot.toString(), 'src/**/entities/*.entity.ts')
// appGlobPattern = absolute path to the root of the project (i.e. C:/Users/user/my-project/)
this.connection.addModels([appGlobPattern])

尝试执行 require(fullPath) 时引发错误输入 sequelize-service ( https://github.com/RobinBuschmann/sequelize-typescript/blob/1c34e87c968b1c8333ef6467c2dd44e069e06fa8/src/sequelize/sequelize/sequelize-service.ts#L57)

由于文件解析器无法解析文件(存在),因此引发错误:

Error: Cannot find module 'C:\Users\user\my-project\src\entities\my-model.entity'



全栈轨道
Error: Cannot find module 'C:\Users\........\notification\entities\communication-channel.entity'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at glob.sync.filter.map.filter.map.fullPath (C:\Users\........\notification\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize-service.js:44:32)
at Array.map (<anonymous>)
at arg.reduce (C:\Users\........\notification\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize-service.js:43:18)
at Array.reduce (<anonymous>)
at Object.getModels (C:\Users\........\notification\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize-service.js:35:20)
at Sequelize.addModels (C:\Users\........\notification\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:34:44)
at DatabaseConnection._addModelsToConnection (C:\Users\........\notificationn\dist\database\classes\database-connection.js:33:25)
at DatabaseConnection.createConnection (C:\Users\........\notification\dist\database\classes\database-connection.js:23:14)
at InstanceWrapper.useFactory [as metatype] (C:\Users\........\notification\dist\database\providers\database-connection-pool.provider.js:13:30)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

这似乎与 NestJS 默认使用的 tsc 编译器有关。或者也许模块加载器不能很好地使用绝对文件路径。

更多细节:
  • Sequelize :“版本”:“5.21.2”
  • Sequelize typescript :“版本”:“1.0.0”
  • typescript “版本”:“3.7.2”

  • 这些是我的 tsconfig 设置:
    {
    "compilerOptions": {
    "module": "CommonJS",
    "moduleResolution": "node",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "target": "ES6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "paths": {
    "express": ["src/multi-tenancy/types/*"]
    }
    },
    "exclude": ["node_modules", "dist"]
    }

    最佳答案

    你不应该使用 src作为文件路径的一部分,一旦您将代码从 Typescript 编译为 JavaScript,您的代码现在位于 dist 中和 src文件夹在上下文中丢失。您还应该更改 .ts.js因为这就是运行时将解析的文件。另一种选择是使用像 join(__dirname, '{dist,src}/**/entities/*.entity.{js,ts}') 这样的 glob。这样您就可以在不更改 src 之间的代码的情况下查看两者和 dist .

    注:join来自path模块

    关于node.js - sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184878/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com