Node.js - 找不到模块

15

我正在使用Node Boilerplate,一切都很顺利,直到我决定在其基础上创建另一个项目(在另一个目录中)。

现在,我在两个不同的文件夹中拥有完全相同的代码库(即此项目),我可以运行其中一个而没有任何问题,但另一个则失败并显示以下错误信息:

% node app.js
node.js:116
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Cannot find module 'connect/middleware/router'
    at Function._resolveFilename (module.js:299:11)
    at Function._load (module.js:245:25)
    at require (module.js:327:19)
    at Object.<anonymous> (/home/gotts/Sites/nodejs-uploadr/lib/express/lib/express/server.js:17:14)
    at Module._compile (module.js:383:26)
    at Object..js (module.js:389:10)
    at Module.load (module.js:315:31)
    at Function._load (module.js:276:12)
    at require (module.js:327:19)
    at Object.<anonymous> (/home/gotts/Sites/nodejs-uploadr/lib/express/lib/express/index.js:28:31)

这里有一个类似的问题解释 - https://github.com/visionmedia/express/issues/535,它说问题在于connect/express的不兼容版本。

但是这怎么可能呢?两个文件夹中的源代码完全相同,在一个副本中运行良好,在另一个副本中失败了?

3个回答

8

这两个文件夹是否有共同的父级目录?Node会在应用程序目录中寻找~/.node_modules和/node_modules模块。


7

好的,让我回答一下自己的问题:

很抱歉提供的信息有误-那两个文件夹并不完全相同(我需要更好地学习unix diff)。在代码中需要require("connect")。

将connect本地检出到/lib文件夹可以优先加载,但如果没有,则会像Ricardo之前设置的那样从~/.node_modules中加载connect。


5

这对我来说可行,但我很困惑为什么使用“-g”安装系统级别时,在运行的js文件中找不到该模块。 - Adam

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