NPM - 应用程序根目录的路径

问题描述:

我正在开发一个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

让用户调用设置变量的函数:

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

我有同样的问题,该目录当前正在执行的脚本。

我只能找到这个环境变量的帮助:

process.env.PWD 

这将始终指向它运行应用程序的根路径。

+1

给我未定义的值... -1 –

试试这个。

var path = require('path'); 
console.log(path.dirname(module.parent.filename));