2011-11-14 43 views
1

我正在開發一個NPM程序包,它需要從應用程序根目錄需要一個模塊。把它看作需要一個屬性模塊的包,它被用戶放在應用程序根目錄下。NPM - 應用程序根目錄的路徑

如何獲取應用程序根目錄的路徑?

UPDATE:

總結什麼,我試圖做的,明確允許你做這樣的事情:

app.use(express.router(myNPMModule.router)); 

路由器功能將得到app作爲參數。這個想法是允許用戶在一個單獨的文件中指定路由,並且他們只需要遵循某些約定,比如將他們的控制器放在/controllers文件夾中,我的模塊將能夠動態地解析路徑,然後調用正確的方法在正確的模塊中。我已經知道它的工作原理了,但是我意識到,如果我將它打包在NPM中,我不再能夠訪問應用程序的路徑,所以我不能動態調用控制器模塊的方法。

+0

你不應該那樣做,而應該讓用戶用屬性調用「構造函數」(或者你有的任何函數)。 – alessioalex

+0

請參閱我對其他答案的評論。我正在寫一個路由器,我期待用戶遵循某些約定。就像將他的控制器放在「controllers/moduleName.js」中 - 然後基於URL,我將能夠調用正確的控制器和方法。 – jeffreyveon

+0

試試我寫的npm [rainbow](https://npmjs.org/package/rainbow)。這是一個與將URL映射到控制器文件路徑的要求相同的路由器中間件。 – mytharcher

回答

3

讓用戶調用設置變量的函數:

myModule.setProps(json) 
    OR 
    myModule = new MyModule(json) 

然後用戶可以要求其根的配置與它初始化你的模塊。

更新在回答編輯的問題:

Express允許你定義這樣的路線:

var routes = require('./routes') 
app.get('/info', routes.info); 

//Routes Module 
exports.info = function(req, res) { 
    res.render('info', {title: 'Express'}) 
}; 

我相信這正是你正在嘗試做的。不是嗎?

更新2:

您可以在使用__dirname

console.log(__dirname); 
+0

我認爲,但我還需要另一個需要能夠動態加載用戶模塊(例如,將請求路由到特定控制器時)。有沒有其他方法可以做到這一點?我可以假設我的模塊將在我的node_modules/moduleName/lib文件夾中,並試圖相對訪問? – jeffreyveon

+0

在程序運行時,模塊中的動態變化可以改變嗎?或動態,就像你想在程序啓動時加載配置文件一樣。 –

+0

我已經更新了更多細節的問題。當用戶輸入一個URL時,我的模塊將解析URL(基於說,像約定一樣的rails),並調用控制器模塊的適當方法,其位置將遵循約定。 – jeffreyveon

1

我有同樣的問題,該目錄當前正在執行的腳本。

我只能找到這個環境變量的幫助:

process.env.PWD 

這將始終指向它運行應用程序的根路徑。

+1

給我未定義的值... -1 –

1

試試這個。

var path = require('path'); 
console.log(path.dirname(module.parent.filename)); 
相關問題