【问题标题】:How do I obtain the directory of the current module in Node.js without using "__dirname" or "import.meta.url"?如何在不使用“__dirname”或“import.meta.url”的情况下获取 Node.js 中当前模块的目录?
【发布时间】:2021-01-16 18:34:26
【问题描述】:

好的,在 Node.js 中,当使用 module.exports 时,你会使用:

__dirname

获取当前文件的位置。

例如,如果您从文件夹 y 中的 x.js 运行它,您会得到如下内容:

blah/blah/blah/y

现在,我不能用了,process.cwd 因为返回了 "root" 脚本的目录,而且因为我用的是import/export,所以我必须解决对于这种 hacky 方法:

// jshint -W024
import path from "path";
import url from "url";

const __dirname = path.dirname(url.fileURLToPath(import.meta.url));

注意:-W024,忽略代码可防止 JSHint 引发 "Expected an identifier and instead saw 'import' (a reserved word)" 警告。

另外,我不能模块化它,使用:

export default __dirname;

因为它会返回模块导出__dirname的目录。

将其转换为函数,如下所示:

// jshint -W024
import path from "path";
import url from "url";

function __dirname() {
  return path.dirname(url.fileURLToPath(import.meta.url));
}

export default __dirname;

也不起作用,它仍然会返回导出__dirname变量的模块的目录。

我的问题是,如何在不使用__dirnameimport.meta.url的情况下获取Node.js中当前模块的目录?

谢谢。

【问题讨论】:

  • 你到底想达到什么目的?
  • @AhmedMagdy 我正在尝试获取 Node.js 中当前模块的目录,而不必使用 __dirnameimport.meta.url

标签: javascript node.js dry es6-modules dirname


【解决方案1】:

如果在解决这个难题时允许使用__filename,您可以这样做

const path = require("path");
console.log(__filename.replace(path.basename(__filename),"")); 

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 2020-08-29
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多