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

thg*_*gie 53 javascript macos require node.js

这是项目结构:

/
  app.js
  package.json
  /node_modules
  /app
    config.json
    /frontend
      assets and html tpls
    /modules
      couch.js
      raeume.js
      users.js
Run Code Online (Sandbox Code Playgroud)

我需要来自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');
Run Code Online (Sandbox Code Playgroud)

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

var couch     = require('./app/modules/couch');
var config    = require('./app/config');
Run Code Online (Sandbox Code Playgroud)

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

Alb*_*gni 109

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

var couch = require('./couch');
var config = require('../config');
Run Code Online (Sandbox Code Playgroud)

如果你写的话,有点澄清

var couch = require('./couch');
Run Code Online (Sandbox Code Playgroud)

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

var couch = require('couch');
Run Code Online (Sandbox Code Playgroud)

你正在尝试require通过安装的沙发模块npm.

  • 你错过了`require('couch')中的`./`;` (2认同)

Man*_*ire 5

当前接受的答案是正确的并正确回答了问题。

尽管与原始问题没有直接关系,但我想为所有Cannot find module在指定了正确的相对路径的情况下收到本地文件错误的人添加另一点。

couch.js假设当前目录中存在同名文件,

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

    var couch = require('./couch');
    var couch = require('./Couch');
    
    Run Code Online (Sandbox Code Playgroud)
  • 但是,在区分大小写的文件系统(如 Linux 上的 ext4)上,require('./couch')可以工作,但require('./Couch')不能。

NodeJS 文档中有一个页面与此相关。

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