gpt4 book ai didi

javascript - 将 require.main 传递给 path.dirname

转载 作者:行者123 更新时间:2023-11-30 16:34:01 24 4
gpt4 key购买 nike

我想知道为什么

path.dirname(require.main)

返回 . 或从我的应用程序的根目录到正在运行的主模块的路径,在这种情况下是相同的——我正在运行一个定义在 gulpfile.js 中的 gulp 任务 在我的应用程序的根目录。

docspath.dirname

Return the directory name of a path. Similar to the Unix dirname command.

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


更多信息

就其值(value)而言,require.main.filename 是我的全局 gulp 安装的深层路径,它远非我所寻找的。

我这样做是为了从我当前的 Node 模块获取一个根级controllers目录的相对路径,这可能恰好安装在任意数量的位置。执行此操作的最终代码如下所示:

path.relative(__dirname, path.resolve(path.dirname(require.main), "controllers"))

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

编辑

总而言之,看起来 path.resolve('.') 实际上会映射到我的应用程序根目录的路径,path.resolve('.', 'controllers ') 将映射到我的根 Controller 目录的路径,path.relative(__dirname, path.resolve('.', "controllers")) 将映射出相对路径从当前位置到所述 Controller 目录。

所以所有这些工作都比需要的多,但我仍然很好奇为什么 path.dirname(require.main) 会像现在这样工作,以及记录在哪里。

最佳答案

查看 Node repl 中的函数。

var path = require('path');

path.dirname.toString();

'function (path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return \'.\';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return 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() 有这样的说法:

DESCRIPTION

The dirname() function takes a pointer to a character string that contains a pathname, and returns a pointer to a string that is a pathname of the parent directory of that file. Trailing '/' characters in the path are not counted as part of the path.

If path does not contain a '/', then dirname() returns a pointer to the string "." . If path is a null pointer or points to an empty string, dirname() returns a pointer to the string "." .

This interface need not be reentrant.

此处链接:dirname

关于javascript - 将 require.main 传递给 path.dirname,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com