Javascript 正在将require.main传递给path.dirname

Javascript 正在将require.main传递给path.dirname,javascript,node.js,Javascript,Node.js,我在想原因 path.dirname(require.main) 返回或从我的应用程序根目录到正在运行的主模块的路径,在本例中是相同的-我正在运行应用程序根目录下的gulpfile.js中定义的gulp任务 用户可以说path.dirname 返回路径的目录名。类似于Unix dirname命令 但是require.main本身是模块对象,而不是路径。这是path.dirname的未记录功能吗 进一步资料 值得一提的是,require.main.filename是我的全局gulp安装的一条很深

我在想原因

path.dirname(require.main)

返回
或从我的应用程序根目录到正在运行的主模块的路径,在本例中是相同的-我正在运行应用程序根目录下的
gulpfile.js
中定义的gulp任务

用户可以说
path.dirname

返回路径的目录名。类似于Unix dirname命令

但是
require.main
本身是模块对象,而不是路径。这是
path.dirname
的未记录功能吗


进一步资料

值得一提的是,
require.main.filename
是我的全局
gulp
安装的一条很深的路径,它离我要找的还很远

我这样做是为了从我的当前节点模块中获取到根级控制器目录的相对路径,它可能安装在任意位置。完成此操作的最终代码如下所示:

path.relative(\uu dirname,path.resolve(path.dirname(require.main),“controllers”))

这个问题的目的只是为了了解
path.dirname
在这里是如何工作的,因为它似乎与文档所说的不同

编辑

综上所述,它看起来像是
path.resolve('.')
实际上将映射到我的应用程序根目录,
path.resolve('.','controllers')
将映射到我的根控制器目录,以及
path.relative(u dirname,path.resolve('.','controllers'))
将映射出从当前位置到所述控制器目录的相对路径

因此,所有这些工作都超出了需要,但我仍然很好奇为什么
path.dirname(require.main)
的行为是这样的,以及在哪里有文档记录

path.dirname({sported:'beef'})
还返回''.'

path.dirname(7)

可能不是你想做的,嗯?尽管它给出的答案看起来很美味,但可能对你不好

path.dirname(require.main.filename)
更有用

编辑: 我没有检查代码,但它似乎不仅仅是将其转换为字符串的工件


path.dirname({foo:cat/bar.baz“})
也返回“

查看了节点repl中的函数

var path = require('path');

path.dirname.toString();
'函数(路径){\n var result=posixSplitPath(path),\n root=result[0],\n dir=result[1];\n\n如果(!root&&!dir){\n//没有任何dirname\n return\'.\';\n}\n\n如果(dir){\n//它有dirname,带尾随斜杠\n dir=dir.substr(0,dir.length-1);\n}\n}\n\n\n返回root+dir;\n}'

格式:

function (path) {
    var result = posixSplitPath(path),
    root = result[0],
    dir = result[1];

    if (!root && !dir) {
        // No dirname whatsoever
        return '.';
    }

    if (dir) {
        // It has a dirname, strip trailing slash
        dir = dir.substr(0, dir.length - 1);
    }
    return root + dir;

}
看起来posixSplitPath函数返回一个数组。如果路径不是字符串,则结果为空数组。(关于posixSplitPath函数的一点推测)

如果索引1、2的值为falsy,则默认值为

libgen.h 我签出了C的
libgen.h
,它是关于
dirname()

描述

函数的作用是:获取指向包含路径名的字符串的指针,并返回指向该文件父目录路径名字符串的指针。路径中的尾随“/”字符不算作路径的一部分

如果路径不包含“/”,则dirname()返回指向字符串“”的指针。如果path是空指针或指向空字符串,则dirname()将返回指向字符串“”的指针

这个接口不需要是可重入的


链接到这里:

结果是
require.main.filename
几乎毫无用处-这就是我的全局gulp安装路径,至少在我运行测试时(
gulp test