将require.main传递给path.dirname
我试图找出原因
path.dirname(require.main)
返回.
或从我的应用程序的根目录到主模块运行的path,在本例中是相同的 – 我正在运行我的应用程序根目录下的gulpfile.js
中定义的一个gulpfile.js
任务。
文档说, path.dirname
返回path的目录名称。 类似于Unix dirname命令。
但require.main
是一个模块对象本身,而不是一个path。 这是一个path.dirname
没有logging的function?
更多信息
require.main.filename
是我的全局require.main.filename
安装的深层path,这是require.main.filename
我所寻找的。
我这样做,所以我可以从我的当前节点模块获得一个根级别controllers
目录的相对path,这可能会安装在任何位置。 最终的代码是这样的:
path.relative(__dirname, path.resolve(path.dirname(require.main), "controllers"))
哪个起作用 ,这个问题的目的只是为了了解path.dirname
是如何工作的,因为它似乎与文档所说的不同。
编辑
所有这一切,看起来像path.resolve('.')
将事实上映射到我的应用程序的根path, path.resolve('.', 'controllers')
将映射出我的根控制器目录的path,和path.relative(__dirname, path.resolve('.', "controllers"))
将映射出从当前位置到所述控制器目录的相对path。
所以,所有这些都比需要更多的工作,但我仍然很好奇,为什么path.dirname(require.main)
行为,以及在那里logging。
看看节点repl中的函数。
var path = require('path'); path.dirname.toString();
(path){\ n var result = posixSplitPath(path),\ n root = result [0],\ n dir = result [1]; \ n \ n if(!root &&!dir){\ n / / no dirname \ n return \'。\ n; \ n} \ n \ n if(dir){\ n //它有一个dirname,strip尾部的斜杠\ n dir = dir.substr(0,dir.length – 1); \ n} \ n \ n返回根目录+目录; \ 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函数返回一个数组。 如果path不是string,则返回空数组。 (关于posixSplitPath函数的一些猜测)
如果索引1,2的值是虚假的,则默认为'.'
libgen.h
我检出C的libgen.h
,这有关于dirname()
说法:
描述
dirname()函数使用指向包含path名的string的指针,并返回指向该文件的父目录的path名的string的指针。 path中的尾部“/”字符不计入path的一部分。
如果path不包含'/',则dirname()返回一个指向string“。”的指针。 。 如果path是一个空指针或指向一个空string,dirname()返回一个指向string“。”的指针。 。
这个接口不需要是可重入的。
链接在这里: dirname
path.dirname({spoiled: 'beef'})
也返回'。'。
那么path.dirname(7)
可能不是你想做什么,呃? 即使它给出了一个看起来很美味的答案,但对你来说可能并不好。
path.dirname(require.main.filename)
更有用。
编辑:我没有检查代码,但它似乎不是只是一个工件将其转换为string。
path.dirname({foo: "cat/bar.baz"})
也返回“。”