Nodejs获取' required '模块的目录

Nodejs get directory of `required` module

本文关键字:模块 Nodejs required 获取      更新时间:2023-09-26

是否可以确定required脚本来自的目录?

我的最终目标是……

// return the directory where `mysql` module is found
var mysqldir = requiredir('mysql')
if(fs.existsSync(mysqldir+"/README.md")){
  console.log(fs.readFileSync(mysqldir+"/README.md").toString())
}

所以我可以有一个方便的参考所有这些模块,希望人们在开明的未来,将包括模块文档/备考表打算以这种方式访问

required.resolve(...)可能是您正在寻找的:

function requiredir(id) {
    return path.dirname(require.resolve(id));
}

虽然,这将遵循main设置:

> requiredir('grunt')
.../node_modules/grunt/lib/

(更新: API的文档不再可用,所以它的使用可能不支持。)另一个选择可能是使用npmview,尽管这仅限于已注册的包:

npm.load({}, function (err) {
    npm.commands.view(['mysql', 'readme'], true, function (err, readme) {
        console.log(readme);
    });
});

如果你想确定一个模块的绝对路径,你可以使用require.resolve('module')

http://nodejs.org/api/globals.html globals_require_resolve

可以通过正则表达式

提取文件夹路径

如果你想以编程方式知道nodejs使用的模块主目录,这是有效的

require.resolve('module_name').replace(/(.*node_modules.)(.*?)('/)(.*)/, `$1$2`)
<标题> 例子

例如,如果你想知道你在nodejs代码中使用的模块jquery的模块主目录在哪里,第一部分

require.resolve('jquery') 

返回(在我的例子中)

/home/jfolpf/autocosts/node_modules/jquery/dist/jquery.js

注意jquery.js不存储在模块主目录中;然而

require.resolve('jquery').replace(/(.*node_modules.)(.*?)('/)(.*)/, `$1$2`)

返回
/home/jfolpf/autocosts/node_modules/jquery

这考虑到要解析模块的路径,node总是递归地寻找名为node_modules的文件夹,如文档中所示。