有谁知道如何在node.js / javascript
中获取模块的名称所以我们说你做了
var RandomModule = require ("fs")
.
.
.
console.log (RandomModule.name)
// -> "fs"
答案 0 :(得分:3)
如果您尝试跟踪依赖项,可以尝试使用require hooks。
创建名为myRequireHook.js
var Module = require('module');
var originalRequire = Module.prototype.require;
Module.prototype.require = function(path) {
console.log('*** Importing lib ' + path + ' from module ' + this.filename);
return originalRequire(path);
};
此代码将挂钩每个require
调用并将其记录到您的控制台中。
不完全是你先问的,但也许它可以帮到你更好。
您需要在主.js文件中调用一次(以node main.js
开头的文件)。
所以在你的main.js
中,你就是这样做的:
require('./myRequireHook');
var fs = require('fs');
var myOtherModule = require('./myOtherModule');
它也将跟踪其他模块中的require
。
这就像babel这样的转发器工作方式。他们挂钩每个require
调用并在加载前转换代码。
答案 1 :(得分:1)
我不知道你为什么会这样做,但有办法。
module
变量在每个node.js文件中自动加载,包含一个名为children
的数组。此数组包含当前文件中require
加载的每个子模块。
这样,您需要严格比较已加载的引用与此数组中的缓存对象版本,以便发现该数组的哪个元素对应于您的模块。
看看这个样本:
var pieces = require('../src/routes/headers');
var childModuleId = discoverChildModuleId(pieces, module);
console.log(childModule);
function discoverChildModuleId(object, moduleObj) {
"use strict";
var childModule = moduleObj.children.find(function(child) {
return object === child.exports;
});
return childModule && childModule.id;
}
此代码将在children
对象中找到对应关系,并带上它的ID。
我将module
作为我的函数的参数,以便您可以将其导出到文件中。否则它会显示discoverChildModule
函数所在的模块(如果它在同一个文件中不会产生任何差异,但如果导出它将会出现)。
注意:
../src/routes/headers
。你会发现类似的东西:/Users/david/git/...
var Schema = require('mongoose').Schema
等导出的属性。有可能创造一个能够做到这一点的功能,但它会遇到很多问题。答案 2 :(得分:0)
从模块内部(在REPL中不起作用)你可以......
console.log( global.process.mainModule.filename );
你会得到'/home/ubuntu/workspace/src/admin.js'