【问题标题】:Cannot assign to read only property 'exports' of object '#<Object>' react and socket无法分配给对象“#<Object>”反应和套接字的只读属性“exports”
【发布时间】:2021-12-04 08:58:53
【问题描述】:

当我尝试在 react 中使用套接字时遇到了这个问题,我知道它说我应该使用 导出默认值而不是 module.export 但这段代码存在于套接字包本身中,当我通过错误更改它时

我使用节点版本 v14.17.0

这些是我使用的包和 react 版本

  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "4.0.3",
    "socket.io-client": "^4.3.1",
    "web-vitals": "^1.0.1"
  },

这是导致此错误的socket包中的一段代码

Object.assign(lookup, {
    Manager,
    Socket,
    io: lookup,
    connect: lookup,
});
if (typeof module !== "undefined") {
    module.exports = lookup;
}

【问题讨论】:

  • 现在将 socket.io-client 降级到 v4.2.0。由于 ESM 构建而引入的错误正在得到解决。最新版本最多可能需要 2-3 天才能稳定到可以使用。
  • 好的,试试这个
  • 效果很好,谢谢@brc-dd

标签: node.js reactjs socket.io


【解决方案1】:

这个错误意味着你试图在一个 ES 模块中使用 commonJS。而是尝试这样做:

export default lookup

当您实例化查找对象时。 module.exports 是 commonJS 的导出方式,而 webpack 使用 ES 语法

【讨论】:

  • 我试过这个,但它告诉我错误,如果条件@Austin Burger,导出默认值不能嵌套在里面
【解决方案2】:

我知道这是解决问题的坏方法,但我用 export 删除了那个 if 语句

if (typeof module !== "undefined") {
    module.exports = lookup;
}

虽然一切正常

【讨论】:

  • 我试过了,它可以工作,但我正在寻找一个更好的解决方案,上面提到的@brc-dd 工作完美
【解决方案3】:

这已在socket-io.client@4.3.2: https://github.com/socketio/socket.io-client/releases/tag/4.3.2 中修复

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2021-09-26
    • 2019-11-28
    • 2019-06-13
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多