2012-04-29 55 views
2

我有一个目录应用程序,这些目录中的文件通过require相互引用。我可能会移动它们,所以我讨厌使用相对路径。有没有办法使用相对于我的应用程序根目录的路径?我可以问'require'从我的应用程序根目录搜索模块吗?

/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'); 

除了路径被追加到/home/robert/src,而不是对自己的评价。

回答

1

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

Index.js刚刚结束了与这样的一堆线:

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

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

0

把你的应用程序到一个文件夹中的应用程序根目录(比如,./app),那么包括这个片段到您的package.json

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

并运行命令。这会将app文件夹软链接到您的node_modules,从而使Node和require做到最好。您可以要求你的模块,像这样:(Windows用户需要手动去做;不知道这是否会在Windows在所有的工作)

require('app/routes/foo') 

相关问题