nodeJS require.paths解决问题

我正试图要求一个相对而且神秘的文件,下面正在发生

这适用于/Users/marcos/Desktop/Taper/lib/utils.js

 myPath = "/Users/marcos/Desktop/Taper/lib/./utils"; require(myPath); 

这不,但它应该指向完全相同的文件:

 require.paths.unshift("/Users/marcos/Desktop/Taper/lib") require("./utils"); //Doesn't work with './' require("utils"); //Works Fine 

任何人都知道为什么我不能使用./在这种情况下加载path

 require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils") 

结果是:

 "/Users/marcos/Desktop/Taper/lib/utils" 

无论如何?

提前致谢

更新:

从文档 :

'/'为前缀的模块是文件的绝对path。 例如, require('/home/marco/foo.js')将加载文件/home/marco/foo.js

'./'为前缀的模块与调用require()的文件相关。 也就是说, circle.js必须和require('./circle') foo.js在同一个目录下才能find它。

如果没有前导'/'或'./'来表示文件,模块可能是“核心模块”,或者是从node_modules文件夹加载的。

如果给定的path不存在, require()会将其code属性设置为'MODULE_NOT_FOUND'的错误。


这是原始的答案,它是指require.paths (不再支持):

从文档 :

在节点中, require.paths是一个string数组,表示模块没有以'./''../'作为前缀时要被search的path

(重点是我的)

你可以使用NODE_PATH来传递它

例:

 NODE_PATH=`pwd` node app.js 

我创build了一个名为“ rekuire ”的新节点模块

它允许你在不使用相对path的情况下“需要”

它在testing/重构方面节省了大量的时间

https://npmjs.org/package/rekuire

超级好用