Why do I get `TypeError: Cannot set property length of #<Map> which has only a getter` error?
Why do I get `TypeError: Cannot set property length of #<Map> which has only a getter` error?
我有一个我使用的 Nest 应用程序(除了其他东西)Fastify, MikroORM and nest-mqtt
(actually using it from a 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
(see this issue 中的一个错误,但是,当只有一个包(MikroORM 或 nest-mqtt
)被导入到模块中时,它并没有失败。
我怀疑这两个包以某种方式相互 interact/conflict,但是,我迷路了。
Here你可以找到一个最小的复制品。使用 npm v8.1.2
和 node v16.13.1
以及 node v17.2.0
进行了测试。另请注意,MQTT 是否实际上是 运行 并不重要。还可以根据需要更改 src/mikro-orm.config.ts
中的 MikroORM 配置。
另见 MikroORM 的 this discussion。
@B4nan user at GitHub found the root of this issue: collections
package patches some global Node objects like Map
, Set
, Array
. The issue was already reported at mqttjs/MQTT.js#1392.
没有 collections
依赖的最后一个版本是 v4.2.8
,没有它的最后一次提交是 8aa2f8d。我目前的解决方法是使用该版本,直到他们从依赖项中删除 collections
。
更新: 有一个新的 PR 应该删除 collections
依赖:mqttjs/MQTT.js#1396.
更新 2: PR 已经合并,mqtt@4.3.4
正在按预期工作。
我有一个我使用的 Nest 应用程序(除了其他东西)Fastify, MikroORM and nest-mqtt
(actually using it from a 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
(see this issue 中的一个错误,但是,当只有一个包(MikroORM 或 nest-mqtt
)被导入到模块中时,它并没有失败。
我怀疑这两个包以某种方式相互 interact/conflict,但是,我迷路了。
Here你可以找到一个最小的复制品。使用 npm v8.1.2
和 node v16.13.1
以及 node v17.2.0
进行了测试。另请注意,MQTT 是否实际上是 运行 并不重要。还可以根据需要更改 src/mikro-orm.config.ts
中的 MikroORM 配置。
另见 MikroORM 的 this discussion。
@B4nan user at GitHub found the root of this issue: collections
package patches some global Node objects like Map
, Set
, Array
. The issue was already reported at mqttjs/MQTT.js#1392.
没有 collections
依赖的最后一个版本是 v4.2.8
,没有它的最后一次提交是 8aa2f8d。我目前的解决方法是使用该版本,直到他们从依赖项中删除 collections
。
更新: 有一个新的 PR 应该删除 collections
依赖:mqttjs/MQTT.js#1396.
更新 2: PR 已经合并,mqtt@4.3.4
正在按预期工作。