实现 Node.js 内部变量 _dirname 和 _filename

2/8/2023 Node.js

# ES Module 遇到问题

当我们在 ESM 中使用 Node.js 内部变量 __dirname 和 __filename,运行代码就会抛出错误。这是为了使 ES Modules 能不做修改就在服务器和浏览器端通用,所以 Node.js 规定 ES Modules 中不能使用一些 Node.js 中的内部变量。

# fileURLToPath 和 dirname

我们只需要使用 url 模块中的 fileURLToPath API,来实现 __filename API。然后用 path 模块中的 dirname API,来实现 __dirname API。

import { fileURLToPath } from 'url'
import { dirname } from 'path'

const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
1
2
3
4
5
Last Updated: 2/8/2023, 1:05:48 AM