NPM - 应用程序根目录的路径
我正在开发一个NPM程序包,它需要从应用程序根目录需要一个模块。把它看作需要一个属性模块的包,它被用户放在应用程序根目录下。NPM - 应用程序根目录的路径
如何获取应用程序根目录的路径?
UPDATE:
总结什么,我试图做的,明确允许你做这样的事情:
app.use(express.router(myNPMModule.router));
路由器功能将得到app
作为参数。这个想法是允许用户在一个单独的文件中指定路由,并且他们只需要遵循某些约定,比如将他们的控制器放在/controllers
文件夹中,我的模块将能够动态地解析路径,然后调用正确的方法在正确的模块中。我已经知道它的工作原理了,但是我意识到,如果我将它打包在NPM中,我不再能够访问应用程序的路径,所以我不能动态调用控制器模块的方法。
让用户调用设置变量的函数:
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);
我认为,但我还需要另一个需要能够动态加载用户模块(例如,将请求路由到特定控制器时)。有没有其他方法可以做到这一点?我可以假设我的模块将在我的node_modules/moduleName/lib文件夹中,并试图相对访问? – jeffreyveon
在程序运行时,模块中的动态变化可以改变吗?或动态,就像你想在程序启动时加载配置文件一样。 –
我已经更新了更多细节的问题。当用户输入一个URL时,我的模块将解析URL(基于说,像约定一样的rails),并调用控制器模块的适当方法,其位置将遵循约定。 – jeffreyveon
我有同样的问题,该目录当前正在执行的脚本。
我只能找到这个环境变量的帮助:
process.env.PWD
这将始终指向它运行应用程序的根路径。
给我未定义的值... -1 –
试试这个。
var path = require('path');
console.log(path.dirname(module.parent.filename));
你不应该那样做,而应该让用户用属性调用“构造函数”(或者你有的任何函数)。 – alessioalex
请参阅我对其他答案的评论。我正在写一个路由器,我期待用户遵循某些约定。就像将他的控制器放在“controllers/moduleName.js”中 - 然后基于URL,我将能够调用正确的控制器和方法。 – jeffreyveon
试试我写的npm [rainbow](https://npmjs.org/package/rainbow)。这是一个与将URL映射到控制器文件路径的要求相同的路由器中间件。 – mytharcher