1

是否可以确定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())
}

所以我可以对所有这些模块有一个方便的参考,希望未来的人们会包括打算以这种方式访问​​的模块文档/备忘单

4

3 回答 3

3

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

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

不过,这将遵循以下main设置:

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

更新:API 的文档不再可用,因此可能不支持它的使用。)另一个选择可能是使用npm's view,尽管这仅限于已注册的包:

npm.load({}, function (err) {
    npm.commands.view(['mysql', 'readme'], true, function (err, readme) {
        console.log(readme);
    });
});
于 2013-02-28T19:31:53.260 回答
2

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

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

您可以通过正则表达式提取文件夹路径

于 2013-02-28T19:22:44.520 回答
1

如果您想以编程方式了解 nodejs 正在使用的模块主目录,这是可行的

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

例子

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

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_modules,如文档中所示。

于 2018-03-23T21:24:52.033 回答