我知道当从当前节点模块启动应用程序时,可以从package.json
检索数据(即node my.js
我可以require('package.json').name
)。
但是如何从不同的模块中检索有关当前应用程序的信息呢? (即启动应用程序,它需要一个需要我模块的模块)。在这种情况下,我需要知道根应用程序是什么。
检索此信息的最有效和最准确的方法是什么?
答案 0 :(得分:1)
我不知道你是否正在寻找解决方案。正如我所见,您正在尝试获取有关模块的文件描述符。
也许您应该从任何模块获取当前文件描述符。我看到了一些关于require('module')
的信息,这可能对此有用。
_resolveLookupPaths
和_resolveFilename
link是有用的方法。但不幸的是,第二种方法只适用于全局依赖。因此,不考虑本地依赖关系。
我相信这段代码可以帮助您获得模块的完整路径:
// my own file descriptor
var packageJson = require('./package.json');
console.log(packageJson);
// module file descriptor
var moduleName = 'mongoose'; // change module name
var modulePath = require('module')._resolveLookupPaths('./');
var moduleDescriptor = require(modulePath[1][1] + '/' + moduleName + '/package.json');
console.log(moduleDescriptor.version);
运行此方法时:
var modulePath = require('module')._resolveLookupPaths('./');
输出始终相同:
[ './',
[ '.',
'/home/<username>/<folder>/<sub-folder>/node_modules',
'/home/<username>/<folder>/node_modules',
'/home/<username>/node_modules',
... ] ]
所以我的完整路径是 modulePath[1][1]
我相信你可以创建任何本地模块的真实路径。但我真的不知道这是获取任何模块的文件描述符信息的最佳或官方方式。
修改强>
也许这可以帮到你:
// index.js
require('mymodule').init();
在节点模块中:
// node_modules/mymodule/index.js
module.exports.init = function() {
var pack = require(process.cwd() + '\\package.json'); // I'm running on windows!!
console.log(pack.version); // output 1.0.0
}
输出是(根据调用我的模块的应用程序):
// 1.0.0