2024 年 Node.js 的首次发布,这个特性终于支持了!

323 阅读1分钟

Node.js封面.png

在 2023 年 10 月,我们迎来了 Node.js 21 版本和 Node.js 20(LTS) 版本。

近日,Node.js 社区正式发布 v20.11.0 LTS 版本,该版本是 Node.js 在 2024 年首次发布。本次虽然是一个小版本迭代,但仍然带来了 15 项稳定性改变和近 300 次提交。值得注意的是该版本增加了 import.meta.dirnameimport.meta.filename 属性。

在该版本之前对应使用 ES module 的开发者,经常会遇到 __dirname is not defined in ES module scope 的问题:

dirname-error.png

在 Node.js 中运行的 CommonJS 文件可以访问两个非常有用的变量:

  • __dirname - 当前文件所在的目录。
  • __filename - 当前文件的完整路径。

但是,在 ECMAScript 模块中,默认情况下这些属性不再可用。幸运的是,您可以自己重新创建它们,以获得与 import.meta.url 属性相同的信息:

import { fileURLToPath } from "node:url";
import path from "node:path";

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

import.meta.url 属性是文件 URL,而不是文件路径,因此首先要将其转换为文件路径。之后,你只需使用 path.dirname() 提取目录。

在 v20.11.0 版本之后,可以直接通过 import.meta.filenameimport.meta.dirname

// /Users/username/test/test.mjs
console.log(import.meta.filename);

// /Users/username/test
console.log(import.meta.dirname);

更多参考:nodejs.org/en/blog/rel…