Javascript 正在获取执行node.js的目录

Javascript 正在获取执行node.js的目录,javascript,node.js,path,directory,pwd,Javascript,Node.js,Path,Directory,Pwd,我有一些项目,我用node main.js/make test等运行它。我需要的是从脚本中获取这个目录。不仅来自main.js,还来自任何子模块。我尝试了路径插件和目录,但得到了当前文件的路径(例如子模块)。我还尝试了require('path').dirname(require.main.filename),但是当我运行make test时,我得到的是mocha dirname而不是我的项目目录。解决此问题的最简单方法是什么?将提供此功能。\uu dirname提供文件驻留的路径。requir

我有一些项目,我用
node main.js
/
make test
等运行它。我需要的是从脚本中获取这个目录。不仅来自
main.js
,还来自任何子模块。我尝试了
路径
插件和
目录
,但得到了当前文件的路径(例如子模块)。我还尝试了
require('path').dirname(require.main.filename)
,但是当我运行
make test
时,我得到的是mocha dirname而不是我的项目目录。解决此问题的最简单方法是什么?

将提供此功能。

\uu dirname
提供文件驻留的路径。

require.cache
存储每个加载的模块及其关联的导入值、父模块、子模块、绝对文件路径等

我相信每个模块都是使用其文件路径作为缓存键分配给缓存对象的,但是您可能需要仔细检查,以确保这一点


如果是这样的话,像
Object.keys(require.cache)
这样简单的东西将为所有模块提供一个文件路径数组。然后根据需要解析每个路径,从每个模块路径中提取要查找的目录信息。

这里有一个方便的函数,可以从控制台访问带有相对路径的文件

function getPath(filename) {
    return (filename[0] != '/' ? process.cwd() + '/' : "") + filename
}

如果您想要可执行文件而不是JS模块的路径,还有一个选项。您可以使用:

process.argv[1] // 0 is path to node

\uuuu dirname
\uuu filename
也可以使用,但它们是模块的路径,因此如果您将其放入一个
require
文件中,它将显示该文件的路径。

此文件和
\uuu filename
它是加载了require不需要的可执行路径的模块的文件和目录。