获取执行 node.js 的目录

Posted

技术标签:

【中文标题】获取执行 node.js 的目录【英文标题】:Getting directory from which node.js was executed 【发布时间】:2013-02-15 10:55:05 【问题描述】:

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

【问题讨论】:

【参考方案1】:

process.cwd() 会提供。

【讨论】:

【参考方案2】:

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

【讨论】:

this 和 __filename 它是加载了不需要的可执行路径的模块的文件和目录。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

以上是关于获取执行 node.js 的目录的主要内容,如果未能解决你的问题,请参考以下文章

node.js -- 同步执行命令并获取结果

在 Node.js 中获取父目录名称

如何在 node.js 中获取目录大小而不递归遍历目录?

如何使用node.js获取当前目录名并显示在html页面上

将文件添加到目录时,在node.js中获取通知

如何使用pkg在Node.js程序中获取程序的当前目录?