在 2023 年 10 月,我们迎来了 Node.js 21 版本和 Node.js 20(LTS) 版本。
近日,Node.js 社区正式发布 v20.11.0 LTS 版本,该版本是 Node.js 在 2024 年首次发布。本次虽然是一个小版本迭代,但仍然带来了 15 项稳定性改变和近 300 次提交。值得注意的是该版本增加了 import.meta.dirname 和 import.meta.filename 属性。
在该版本之前对应使用 ES module 的开发者,经常会遇到 __dirname is not defined in ES module scope 的问题:
在 Node.js 中运行的 CommonJS 文件可以访问两个非常有用的变量:
但是,在 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.filename 和 import.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