当使用browserify将一个socket.io依赖项与–node标志绑定在一起时,“Error:Can not find module”

我试图使用browserify捆绑我的服务器端代码到一个单一的JS文件。 因此,我正在运行

browserify --node -t coffeeify source/server.js.coffee -o deployment/server.js 

但是我收到以下错误

 Error: Cannot find module '../build/Release/bufferutil' from '/My/Project/Path/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib' 

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

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

 ls node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/ 

我懂了

 .deps/ bufferutil.node* linker.lock obj.target/ validation.node* 

一些谷歌search引导我到这个https://github.com/websockets/ws/issues/25 。 但是这似乎是指旧版本的ws 。 模块中的ws版本已经超越了这个版本,而且我也已经尝试过从源代码重build节点,但无济于事。

任何想法什么可能仍然是造成这个错误?

我遇到了同样的问题,我先用bufferutil然后用utf-8-validate ,但是根据这个Readme.md ,你需要用--save选项来安装它们。 希望这可以帮助。

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

  • npm install --save bufferutil :改进内部缓冲区操作,可以更快地处理被掩码的WebSocket帧和一般的缓冲区操作。

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