获取执行node.js的目录

时间:2013-03-01 02:08:59

标签: javascript node.js path directory pwd

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

5 个答案:

答案 0 :(得分:37)

process.cwd()将提供此功能。

答案 1 :(得分:5)

__dirname为您提供文件所在的路径。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

这是一个方便的功能,可从控制台访问带有相对路径的文件

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

答案 4 :(得分:0)

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

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

__dirname__filename也可以使用,但是它们是模块的路径,因此,如果将其放入require文件中,则会显示该文件的路径。