7

我让我的服务器使用早期版本的 node.js、npm 和 socket.io,但更新后我开始遇到 socket.io 的问题:

$ node server.js

node.js:237
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module './lib/socket.io'
    at Function._resolveFilename (module.js:333:15)
    at Function._load (module.js:280:25)
    at Module.require (module.js:357:17)
    at require (module.js:373:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/socket.io/index.js:8:18)
    at Module._compile (module.js:444:26)
    at Object..js (module.js:462:10)
    at Module.load (module.js:351:32)
    at Function._load (module.js:309:12)
    at Module.require (module.js:357:17)

在升级之前,我在 node_modules 下有一个 socket.io 的符号链接,指向同名的“集中安装”目录。最近我尝试通过发出以下命令将socket.io本地安装到我的项目中:

npm install socket.io

在我的项目中将 socket.io 放在 node_modules 下。起初我发现错误消息说“./lib/socket.io”很奇怪,但是当我查看它时,我发现 project/node_modules/socket.io/index.js 需要这样的 socket.io:

module.exports = require('./lib/socket.io');

但是除了运输之外什么都没有:

...project/node_modules/socket.io/lib
$ ll
total 24
drwxrwxr-x 3 ghbarratt dev  4096 Mar 26 14:38 .
drwxrwxr-x 5 ghbarratt dev  4096 Mar 26 15:03 ..
-rw-rw-r-- 1 ghbarratt dev 10777 Mar  6 16:37 transport.js
drwxrwxr-x 3 ghbarratt dev  4096 Mar 26 14:38 transports

lib下应该有另一个socket.io目录还是socket.io.js文件?为什么 index.js 需要一个似乎丢失的内部文件?

版本:

node -v
v0.7.7-pre

npm -v
1.1.12

socket.io@0.9.2

Distributor ID: Ubuntu
Description:    Ubuntu 10.10
Release:        10.10
Codename:       maverick
4

1 回答 1

17

我讨厌回答我自己的问题,但我确实解决了问题并且没有其他答案,所以我将添加这个以防它可以帮助其他人。

有了 Felix Loether 的评论(我 +1ed),我相当确定我没有得到我在npm install socket.io. 我尝试做一个apt-get update/ upgrade,认为我可能需要更新 tar 或其他东西,但结果仍然相同。

我注意到安装输出中的 304 响应,当时我想知道是否有某种我应该尝试清除的 npm 缓存。我发现我可以使用以下命令清除 npm 缓存:npm cache clean. 清理缓存终于让我摆脱了无错误直到运行时的问题。

然后我开始收到一条错误消息:make: node-waf: Command not found导致我重新安装 node

毕竟,它奏效了!

于 2012-04-05T20:13:44.977 回答