我可以问“需要”从我的应用程序根目录search模块吗?

我有一个应用程序与目录,并在这些目录中的文件通过require相互引用。 我可能会移动它们,所以我讨厌使用相对path。 有没有办法使用相对于我的应用程序根的path?

我有

 /home/robert/src/application/ |\ routes | \ foo.js |\ models \ bar.js // foo.js var bar = require('../models/bar') , stuff = require('../other_stuff/stuff'); 

我想要

 /home/robert/src/application/ |\ routes | \ foo.js |\ models \ bar.js // foo.js var bar = require('/models/bar') , stuff = require('/other_stuff/stuff'); 

除了path被附加到/home/robert/src而不是自己评估之外。

很多人已经开始创build一个index.js文件,从一个地方导出所有的模块。 然后,模块只需要索引文件中的这些导出,而不是实际定义模块的位置。 如果你移动任何东西,你只需要更新这个文件。 此外,它使创build代码覆盖更容易。

Index.js只是像这样一堆行:

 module.exports.app = process.env.EXPRESS_COV ? require('./lib-cov/app') : require('./lib/app'); 

基本上这个导出app的任何模块需要它使用标准模块或代码覆盖版本取决于一个variables。

关于什么

 require(__dirname + '/models/bar'); 

请参阅: http : //nodejs.org/docs/latest/api/globals.html#globals_dirname

把你的应用程序放入应用程序根目录下的一个文件夹(比如./app ),然后将这个片段包含到你的package.json

 "scripts": { "postinstall": "ln -sf ../app ./node_modules" } 

并运行命令。 这将软件链接到您的node_modulesapp文件夹,允许节点,并require做的最好。 你将能够像这样需要你的模块:

 require('app/routes/foo') 

(Windows用户需要手动执行;不确定它是否可以在Windows上运行。)