在node.js中获取模块的名称

imp*_*ult 5 javascript module fs node.js npm

有谁知道如何在node.js/javascript中获取模块的名称

所以我们说你这样做

var RandomModule = require ("fs")
.
.
.
console.log (RandomModule.name)
// -> "fs"
Run Code Online (Sandbox Code Playgroud)

Dav*_*ruz 2

我不知道你为什么需要它,但有一种方法。

module变量会自动加载到每个 node.js 文件中,包含一个名为 的数组childrenrequire该数组包含当前文件中加载的每个子模块。

这样,您需要严格比较加载的引用与该数组中缓存的对象版本,以发现数组的哪个元素对应于您的模块。

看这个样本:

var pieces = require('../src/routes/headers');

var childModuleId = discoverChildModuleId(pieces, module);
console.log(childModuleId);

function discoverChildModuleId(object, moduleObj) {
    "use strict";
    var childModule = moduleObj.children.find(function(child) {
        return object === child.exports;
    });
    return childModule && childModule.id;
}
Run Code Online (Sandbox Code Playgroud)

这段代码会找到object中的对应关系children并带来它的id。

我将其module作为函数的参数,以便您可以将其导出到文件中。否则,它会向您显示discoverChildModule函数所在的模块(如果它位于同一个文件中,则不会产生任何差异,但如果导出,则会产生任何差异)。

笔记:

  • 模块 ID 具有完整路径名。所以不要指望找到../src/routes/headers。你会发现类似的东西:/Users/david/git/...
  • 我的算法不会检测导出的属性,例如var Schema = require('mongoose').Schema. 可以创建一个能够实现此目的的函数,但它会遇到很多问题。