使用 browserify 将 socket.io 依赖项与 --node 标志捆绑在一起时出现“错误:找不到模块”

fyn*_*yky 4 node.js socket.io browserify

我正在尝试使用 browserify 将我的服务器端代码捆绑到一个 JS 文件中。因此我在跑步

browserify --node -t coffeeify source/server.js.coffee -o deployment/server.js 
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误

Error: Cannot find module '../build/Release/bufferutil' from '/My/Project/Path/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib'
Run Code Online (Sandbox Code Playgroud)

唯一的违规行似乎是require "socket.io". 当我删除它时,捆绑工作正常。如果我删除--node标志,它也可以正常工作。

当我检查目录时,“缺少”模块似乎在那里

ls node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/
Run Code Online (Sandbox Code Playgroud)

我懂了

.deps/           bufferutil.node* linker.lock      obj.target/      validation.node*
Run Code Online (Sandbox Code Playgroud)

一些谷歌搜索让我找到了这个https://github.com/websockets/ws/issues/25。但这似乎是指旧版本的ws. ws模块中的版本已经超出了这个范围,我也已经尝试按照建议从源代码重建节点,但无济于事。

知道什么可能仍然导致此错误吗?

low*_*cks 7

我遇到了同样的问题,我首先使用bufferutilthen with出错utf-8-validate,但是根据这个Readme.md,您需要将它们安装为带有--save选项的要求。希望这可以帮助。

有 2 个可选模块可以与 ws 模块一起安装。这些模块是二进制插件,可改进某些操作,但由于它们是二进制插件,因此它们需要编译,如果主机系统上未安装 c++ 编译器,则可能会失败。

  • npm install --save bufferutil:改进了内部缓冲区操作,允许更快地处理屏蔽的 WebSocket 帧和一般缓冲区操作。

  • npm install --save utf-8-validate:规范要求验证无效的 UTF-8 字符,其中一些验证无法在 JavaScript 中完成,因此需要二进制插件。在大多数情况下,出于安全目的,您已经在验证收到的输入,从而导致双重验证。但是如果你想 100% 符合规范并快速验证 UTF-8,那么这个模块是必须的。