当使用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,那么这个模块是必须的。