2024年,Node.js迎来重要更新,这个特性终于实现!

发表时间: 2024-01-14 15:20

在 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 的问题:

在 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.mjsconsole.log(import.meta.filename);// /Users/username/testconsole.log(import.meta.dirname);

更多参考:https://nodejs.org/en/blog/release/v20.11.0