如何在不使用“__dirname”或“import.meta.url”的情况下获取Node.js中当前模块的目录?

问题描述 投票:0回答:2

好的,在 Node.js 中,当使用

module.exports
时,你会使用:

__dirname

获取当前文件的位置。

例如,如果您从文件夹

x.js
中的
y
运行它,您会得到如下内容:

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 引发“需要一个标识符,而是看到‘导入’(保留字)”警告。

另外,我无法将其模块化,使用:

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
变量的模块的目录。

我的问题是,如何在不使用

__dirname
import.meta.url
的情况下获取 Node.js 中当前模块的目录?

谢谢你。

javascript node.js dry es6-modules dirname
2个回答
0
投票

要在节点中使用 __dirname,我们需要从路径模块和 fileURLToPath 导入 dirname 从 url 模块并使用 __dirname 如下:

从“路径”导入{dirname}; 从“url”导入 { fileURLToPath };

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


-3
投票

如果在解决这个难题时允许使用

__filename
,你可以这样做

const path = require("path");
console.log(__filename.replace(path.basename(__filename),"")); 
© www.soinside.com 2019 - 2024. All rights reserved.