【问题标题】:Why do I get `TypeError: Cannot set property length of #<Map> which has only a getter` error?为什么我会收到`TypeError: Cannot set property length of #<Map> which has only a getter`错误?
【发布时间】:2022-01-08 22:23:38
【问题描述】:

我有一个 Nest 应用程序,我在其中使用(除了其他东西)FastifyMikroORMnest-mqtt(实际上是从 fork 使用它,它为 Nest 8 修复了它)。

现在,问题在于同时使用 MikroORM 和 nest-mqtt:当两者都导入一个模块(MikroOrmModule.forRoot()MqttModule.forRoot())时,会引发以下错误:

TypeError: Cannot set property length of #<Map> which has only a getter
    at _clone (/home/ts/mikro-orm-nest-mqtt/node_modules/clone/clone.js:162:16)
    at _clone (/home/ts/mikro-orm-nest-mqtt/node_modules/clone/clone.js:162:18)
    at clone (/home/ts/mikro-orm-nest-mqtt/node_modules/clone/clone.js:202:10)
    at Function.copy (/home/ts/mikro-orm-nest-mqtt/node_modules/@mikro-orm/core/dist/utils/Utils.js:237:36)
    at MetadataDiscovery.discoverDirectories (/home/ts/mikro-orm-nest-mqtt/node_modules/@mikro-orm/core/dist/metadata/MetadataDiscovery.js:137:55)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at MetadataDiscovery.findEntities (/home/ts/mikro-orm-nest-mqtt/node_modules/@mikro-orm/core/dist/metadata/MetadataDiscovery.js:106:9)
    at MetadataDiscovery.discover (/home/ts/mikro-orm-nest-mqtt/node_modules/@mikro-orm/core/dist/metadata/MetadataDiscovery.js:53:9)
    at MikroORM.discoverEntities (/home/ts/mikro-orm-nest-mqtt/node_modules/@mikro-orm/core/dist/MikroORM.js:87:25)
    at Function.init (/home/ts/mikro-orm-nest-mqtt/node_modules/@mikro-orm/core/dist/MikroORM.js:42:9)

起初,我认为这是clone 中的错误(请参阅this issue),但是,当仅将其中一个包(MikroORM 或nest-mqtt)导入模块时,它不会失败。

我怀疑这两个包以某种方式相互交互/冲突,但是,我迷路了。

Here你可以找到最小的复制品。用npm v8.1.2node v16.13.1node v17.2.0 测试。另请注意,MQTT 是否实际运行并不重要。还可以根据需要更改 src/mikro-orm.config.ts 中的 MikroORM 配置。

另请参阅 MikroORM 的 this discussion

【问题讨论】:

    标签: typescript nestjs mikro-orm


    【解决方案1】:

    @B4nan GitHub 上的用户 found 此问题的根源:collections 软件包修补了一些全局 Node 对象,例如 MapSetArray。该问题已在mqttjs/MQTT.js#1392 报告。

    没有collections 依赖的最后一个版本是v4.2.8,没有它的最后一个提交是8aa2f8d。我目前的解决方法是使用该版本,直到他们从依赖项中删除 collections

    更新:有一个新的 PR 应该删除 collections 依赖:mqttjs/MQTT.js#1396

    更新 2: PR 已合并,mqtt@4.3.4 正在按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2021-09-25
      • 2020-09-20
      相关资源
      最近更新 更多