繁体   English   中英

在Node.js中,模块如何从应用程序的package.json中获取数据?

[英]In Node.js, how can a module get data from an application's package.json?

我有一个模块。 在其中,我想从我父应用程序的package.json文件中访问数据。 这样做的最佳做法是什么?

我通过上升2级并需要文件(或使用nconf配置加载器)来做到这一点。

var appdir = path.resolve(__dirname, '../../');
nconf.file('app', path.join(appdir, 'package.json'));

但这似乎很容易破裂。

我也听说过pkginfo ,它会自动从我自己的模块的package.json中获取信息,但我希望从父应用程序中获取数据。

谢谢你的帮助!

编辑:我想另一种问的方式是,我如何获得应用程序的路径(而不是模块路径)?

您可以使用

require.main.require './package'

但只有当您的父应用程序的文件位于其目录的根目录中时,它才会起作用。

你也可以将它包装成try ... catch并添加../到path,直到找到package.json

您可以在这里阅读有关访问主模块的更多信息http://nodejs.org/api/modules.html#modules_accessing_the_main_module

添加到pcru的方法,这应该工作:

function loadMainPackageJSON(attempts) {
  attempts = attempts || 1;
  if (attempts > 5) {
    throw new Error('Can\'t resolve main package.json file');
  }
  var mainPath = attempts === 1 ? './' : Array(attempts).join("../");
  try {
    return require.main.require(mainPath + 'package.json');
  } catch (e) {
    return loadMainPackageJSON(attempts + 1);
  }
}

var packageJSON = loadMainPackageJSON();

请记住,这将为您提供主要模块,您认为这是您想要的,但如果您正在构建一个像我一样的命令行工具,那么您真正想要的是将package.json正好放在上面的两个文件夹中如果您的工具要在本地安装并使用npm run-script调用,那么您的安装位置

正如在运行node.js应用程序确定项目根目录中所述,到达应用程序路径的最简单方法之一是使用process.cwd() ,前提是您必须始终从同一目录启动主js程序。 node app/main.jscd app && node main.js将给出不同的结果。

另一种方法是递归地跟随对module.parent的引用,然后在未定义module.parent时读出module.filename 这也预先假定了一些关于您的应用程序的知识。 如果主脚本相对于package.json的位置可能不同,它将无法工作。 即你必须知道主脚本是在app目录的根目录中,还是在某种'bin','app'或'lib'目录中。 但是,一旦找到顶级模块,就可以尝试使用pkginfo用于查找当前文件的package.json的相同算法找到最近的package.json。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM