node.js无法在同一文件夹中找到模块

时间:2014-09-14 15:23:29

标签: node.js

我试图使用简单的"颜色"模块在我的日志中设置cli-colors,没什么特别的。

好吧,我在路径colors.js中有一个名为./app/config/colors.js的模块,内容为:

var clc = require('cli-color');

var colors = {
  ok: clc.cyan,
  error: clc.red.bold,
  warn: clc.yellowBright,
  high: clc.white.bgGreen
};

module.exports = colors;

简单。好吧,当我在server.js中需要它时(在项目的根目录,在/ app之上)它工作正常,但是,当我尝试在./app/config/db.js中使用它时,它会抛出一个错误:< / p>

Error: Cannot find module './app/config/colors.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/nano/Dev/bears-api/app/config/db.js:3:14)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
14 Sep 10:21:00 - [nodemon] app crashed - waiting for file changes before starting...

为什么它在server.js中有效?

2 个答案:

答案 0 :(得分:19)

您可能需要使用相对路径的模块。

相对于需求模块的位置解析相对路径。

引用docs

  

前缀为“./”的模块与调用require()的文件有关。   也就是说,circle.js必须与foo.js在同一目录中   要求('./ circle')找到它。

所以如果你做了

var whatever = require('./app/config/colors.js');

位于./app/config/内的模块内,然后节点将查找./app/config/app/config/colors.js并失败。

如果要求和所需模块都在同一目录中,请使用:

var whatever = require('./colors.js');

甚至更短:

var whatever = require('./colors');

答案 1 :(得分:-3)

该模块应位于&#34; node_modules&#34;像你所描述的那样访问它的文件夹。