好的,在 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 中当前模块的目录?
谢谢你。
要在节点中使用 __dirname,我们需要从路径模块和 fileURLToPath 导入 dirname 从 url 模块并使用 __dirname 如下:
从“路径”导入{dirname}; 从“url”导入 { fileURLToPath };
const __dirname = dirname(fileURLToPath(import.meta.url));
如果在解决这个难题时允许使用
__filename
,你可以这样做
const path = require("path");
console.log(__filename.replace(path.basename(__filename),""));