node.js要求找不到自定义模块

时间:2013-05-20 15:13:13

标签: javascript macos node.js require

这是项目结构:

/
  app.js
  package.json
  /node_modules
  /app
    config.json
    /frontend
      assets and html tpls
    /modules
      couch.js
      raeume.js
      users.js

我需要来自app.js的config.json,raeume.js和users.js,一切正常。

var config   = require('./app/config');
var raeume   = require('./app/modules/raeume');
var users    = require('./app/modules/users');

然后我以同样的方式要求user.js中的config.json和couch.js,它找不到任何东西。

var couch     = require('./app/modules/couch');
var config    = require('./app/config');

我想它应该找到它。经过一些研究,我看到了各种各样的问题,包括如何编译节点。因此包括:我使用节点v0.10.7在osx 10.8上工作。

4 个答案:

答案 0 :(得分:104)

路径是相对于require文件的目录,所以它应该是这样的:

var couch = require('./couch');
var config = require('../config');

如果你写的话,有点澄清

var couch = require('./couch');

如果你写的话,你正试图require驻留在当前目录中的榻榻米模块

var couch = require('couch');

您正尝试require通过npm安装的沙发模块。

答案 1 :(得分:3)

以下是您的操作方法:

var users    = require('./../modules/users');

答案 2 :(得分:2)

必须是:

var config = require(../../app/config)

var couch = require(./couch) (same directory)

答案 3 :(得分:0)

current accepted answer 正确并正确回答了问题。

虽然与原始问题没有直接关系,但我想在这里为所有那些在本地文件中遇到 >scour --help 错误但指定了正确的相对路径的人补充一点。

假设当前目录中存在一个名为 Cannot find module 的文件,

  • 在不区分大小写的文件系统(如 Windows 上的 NTFS)上,这两行都可以使用 -

    couch.js
  • 但是,在区分大小写的文件系统(如 Linux 上的 ext4)上,var couch = require('./couch'); var couch = require('./Couch'); 会起作用,但 require('./couch') 不会。

关于此有 a page in the NodeJS docs

我希望这可以帮助那些在从 Windows/Mac 迁移到 Linux 后完美运行的代码停止工作的人。 ?