【问题标题】:NPM - path to root of the applicationNPM - 应用程序根目录的路径
【发布时间】:2013-07-10 06:01:39
【问题描述】:

我正在开发一个 NPM 包,它需要来自应用程序根目录的模块。将其视为需要属性模块的包,该模块由用户放置在应用程序根目录中。

如何获取应用程序根目录的路径?

更新:

总结一下我想要做的事情,express 允许你做这样的事情:

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

路由器函数将获取app作为参数。这个想法是允许用户在单独的文件中指定路由,他们只需要遵循某些约定,比如将他们的控制器放在/controllers 文件夹中,我的模块将能够动态解析路径,然后调用正确模块中的正确方法。我已经让它工作了,但是我意识到如果我将它打包在 NPM 中,我将无法再访问应用程序的路径,因此我无法动态调用控制器模块的方法。

【问题讨论】:

  • 你不应该这样做,而是让用户使用属性调用“构造函数”(或你拥有的任何函数)。
  • 查看我对另一个答案的评论。我正在编写一个路由器,我希望用户遵循某些约定。就像将他的控制器放在“controllers/moduleName.js”中一样——然后根据 URL,我将能够调用正确的控制器和方法。
  • 试试我写的 npm rainbow。它是一个路由器中间件,与您将 URL 映射到控制器文件路径的要求相同。

标签: node.js express npm


【解决方案1】:

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

  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 文件夹中,然后尝试相对访问吗?
  • 在程序运行时动态地改变模块?或在程序启动时动态加载配置文件。
  • 我已经用更多细节更新了这个问题。当用户输入 URL 时,我的模块将解析 URL(基于类似 rails 的约定)并调用控制器模块的适当方法,其位置将遵循约定。
  • 谢谢,我最终采用了__dirname 方法。
【解决方案2】:

我也有同样的问题。

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

process.env.PWD

它总是指向运行它的应用程序路径的根目录。

【讨论】:

  • 给我未定义的价值... -1
【解决方案3】:

试试这个。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2011-09-30
    • 2011-04-13
    • 2021-10-09
    相关资源
    最近更新 更多