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

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

我已经完成了这两个级别,并要求文件(或使用nconfconfiguration加载器)的这种疯狂的方式。

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

但是,这似乎可以轻松地打破。

另外我听说pkginfo ,它会自动从我自己的模块的package.json中获取信息,但是我正在从父应用程序中获取数据。

谢谢你的帮助!

编辑:我想另一种问的方式是,我怎样才能得到应用程序的path(而不是模块path)?

您可以使用

 require.main.require './package' 

但是,只有当你的父应用程序的文件位于它的目录的根目录时,它才能工作。

你也可以把它封装到try ... catch ,并将../添加到path中,直到findpackage.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(); 

请记住,这会让你成为主要的模块,这是你想要的东西,但是如果你像我一样构build一个命令行工具,你真正想要的只是获得package.json上面两个文件夹如果您的工具是要在本地安装并使用npm run-script调用,那么您安装的位置是

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

另一种方法是recursion地跟随对module.parent的引用,然后在module.parent未定义时读出module.filename 。 这也预设了一些关于你的应用程序的知识。 如果主脚本相对于package.json的位置可能会有所不同,它将不起作用。 也就是说,您必须知道主脚本是否位于应用程序目录的根目录中,或者可能位于某种“bin”,“app”或“lib”目录中。 但是,一旦find顶层模块,可以尝试使用相同的algorithmfind最接近的package.json,pkginfo用它来查找当前文件的package.json。