2012-04-29 50 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') 

相關問題