错误:找不到模块'./lib/socket.io'。

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

3
node_modules/socket.io/lib/ 应该包含多个JS文件,其中包括 socket.io.js。至少我的版本中有这些文件(node 0.6.5,npm 1.1.0,socket.io 0.9.2)。 - Felix Loether
@Felix Loether - 感谢您的确认。现在我需要弄清楚为什么我没有得到所有应有的文件。 - ghbarratt
1个回答

17

我不太愿意回答自己的问题,但是我已经解决了问题并且没有其他答案,所以我要添加这个答案以便帮助其他人。

根据Felix Loether的评论(我点了+1),我相当确定在npm install socket.io期间我没有得到所有应该得到的文件。我尝试执行apt-get update/upgrade,认为我可能需要更新tar或其他一些东西,但结果仍然相同。

我注意到安装输出中有一个304响应,然后想知道是否有某种npm缓存需要清除。我发现可以使用命令npm cache clean清除npm缓存。清除缓存最终使我克服了运行时没有错误的问题。

然后我开始收到一个错误消息:make:node-waf:命令未找到, 这导致我重新安装了node

经过这一切,它终于可用了!


2
+1 引用 npm cache clean。这解决了一个类似的问题。 - Emerson Rocha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接