-
__filename
__filename
是一个全局变量,返回当前模块的绝对路径(包括文件名)。返回值类型:
string
假设当前目录结构如下:
/project ├── app.js ├── folder └── script.js
在上面的 script.js 文件中使用
__filename
:// 输出当前文件 /project/folder/script.js console.log(__filename)
-
__dirname
__dirname
是一个全局变量,返回当前模块所在目录的绝对路径,返回值不受调用代码的位置影响。返回值类型:
string
假设当前目录结构如下:
/project ├── app.js ├── folder └── script.js
在上面的 script.js 文件中使用
__dirname
:// 输出当前文件所在的目录 /project/folder console.log(__dirname)
-
path.dirname(path)
path.dirname
(path) 是 path 模块中的方法,用于对 给定路径 字符串进行解析,并返回路径的目录部分。返回值类型:
string
const path = require("path") const dirname = path.dirname("/project/folder/script.js") // 输出给定路径的目录部分 /project/folder console.log(dirname)
-
process.cwd()
process.cwd
() 获取的是 当前工作目录(Current Working Directory),这个工作目录是指运行 Node.js 进程时所在的目录,通常与启动脚本的位置有关,常用于与命令操作相关的场景。返回值类型:
string
假设当前目录结构如下:
/project ├── app.js ├── folder └── script.js
app.js 的内容如下:
consle.log(process.cwd())
-
如果在
/project
目录下运行node app.js
,输出:/project
-
如果在
/project/folder
目录下运行node ../app.js
,输出:/project/folder
process 是 Node.js 的全局对象,可以在 Node.js 脚本中直接使用。
-
-
path.resolve([...paths])
path.resolve([...paths])
方法将一系列路径或路径段解析为绝对路径。它会从右到左依次处理每个路径,每个后续路径都放在前面(左边),直到构造成第一个绝对路径。例如,path.resolve('/foo','/bar','baz')
会返回/bar/baz
,因为baz
不是绝对路径,但/bar/baz
是。返回值类型:
string
-
如果在处理所有给定
path
段后尚未生成绝对路径,则使用当前工作目录const path = require("path") // 如果当前工作目录是 /root/mine;那么下面代码会返回 /root/mine/project/asset/gif/image.gif path.resolve("project", "asset/png", "../gif/image.gif")
-
成的路径将被标准化,并且尾随斜杠将被删除,除非该路径被解析为根目录
const path = require("path") // 路径 `/foo/bar/` 的尾随斜杠被移除 path.resolve('/foo/bar/') // 输出:/foo/bar // 如果路径是根目录 “/”,尾随斜杠保留 path.resolve('/') // 输出:/
-
零长度
path
段将被忽略(零长度path
段是指传入的路径字符串为空字符串""
)const path = require("path") path.resolve("/foo", "", "/bar") // 输出:/foo/bar
-
如果没有传递
path
段,path.resolve()
将返回当前工作目录的绝对路径const path = require("path"); console.log(path.resolve()); // 输出:当前工作目录的绝对路径,比如 /Users/username/project
-
-
path.join([...paths])
path.join([...paths])
方法使用 特定平台的分隔符 作为分隔符,将所有给定的路径段连接在一起,然后对生成的路径进行规范化处理。返回值类型:
string
-
零长度的路径段将被忽略
const path = require('path'); console.log(path.join('/foo', '', 'bar')); // 输出:/foo/bar
-
如果连接的路径字符串是零长度字符串,则将返回“.”,代表当前工作目录
const path = require('path'); console.log(path.join('', '')); // 输出:. console.log(path.join()); // 输出:.
特定平台的分隔符,是指操作系统使用的路径分隔符,不同操作系统的路径分隔符是不同的。
- Windows:路径分隔符是反斜杠(
\
) - POSIX(Linux、macOS 等类 Unix 系统):路径分隔符是正斜杠(
/
)
-
-
url.fileURLToPath(url[,options])
url.fileURLToPath(url[,options])
方法用于将文件 URL 字符串或者 URL 对象(通过new URL()
创建)转换为本地文件系统的路径字符串。第二个参数options
是一个可选参数,用于指定返回的路径格式(Windows 或 POSIX)。options
参数是一个可选对象,有以下属性:windows
(布尔值):设置为true
,返回 Windows 风格的路径(例如,C:\path\to\file
);设置为false
,返回 POSIX 风格的路径(例如,/path/to/file
)- 默认值:
undefined
,表示使用系统的默认路径格式
返回值类型:
string
-
基本用法(不传 options 参数)
const { fileURLToPath } = require('url'); const fileUrl = new URL('file:///C:/path/to/file.txt'); console.log(fileURLToPath(fileUrl)); // 在 Windows 上,输出:C:\path\to\file.txt // 在 POSIX 系统上(如 Linux),输出:/C:/path/to/file.txt
-
指定返回 Windows 风格路径
const { fileURLToPath } = require('url'); const fileUrl = new URL('file:///C:/path/to/file.txt'); console.log(fileURLToPath(fileUrl, { windows: true })); // 强制输出:C:\path\to\file.txt(即使在 POSIX 系统上运行)
-
指定返回 POSIX 风格路径
const { fileURLToPath } = require('url'); const fileUrl = new URL('file:///C:/path/to/file.txt'); console.log(fileURLToPath(fileUrl, { windows: false })); // 强制输出:/C:/path/to/file.txt(即使在 Windows 系统上运行)
-
url.pathToFileURL(path[, options])
url.pathToFileURL(path[, options])
方法用于将文件系统的路径字符串转换为文件 URL 对象。第二个参数options
是一个可选参数,用于控制如何解释传入的path
。options
参数是一个可选对象,有以下属性:windows
(布尔值):设置为true
,将path
按照 Windows 文件路径规则解析;设置为false
,将path
按照 POSIX 文件路径规则解析- 默认值:
undefined
,自动根据运行环境选择默认规则
返回值类型:
URL
对象-
基本用法(不传 options 参数)
让 Node.js 自动根据当前操作系统选择路径解析规则:
const { pathToFileURL } = require("url") const filePath = __dirname; const fileUrl = pathToFileURL(filePath) console.log(fileRul.href) // 根据操作系统解析成文件 URL
-
将
path
按照 Windows 文件路径规则解析强制将路径视为 Windows 文件路径,即使当前环境是 POSIX 系统:
const { pathToFileURL } = require('url'); const filePath = "C:\\path\\to\\file"; const fileUrl = pathToFileURL(filePath, { windows: true }); console.log(fileUrl.href); // file:///C:/path/to/file
-
将
path
按照 POSIX 文件路径规则解析强制将路径视为 POSIX 文件路径,即使当前环境是 Windows 系统:
const { pathToFileURL } = require("url") const filePath = "/path/to/file"; const fileUrl = pathToFileURL(filePath, { windows: false }); console.log(fileUrl.href); // file:///path/to/file
[!NOTE]
为什么上面的 file 协议有三个斜杠?
如:file:///C:/path/to/file
按照 RFC 3986 标准,URL 的通用格式为:
<scheme>://<authority>/<path>
scheme
是协议名称,例如http
或file
authority
通常包括主机名,例如example.com
或文件系统的主机表示path
是资源的位置对于
file://
协议:
scheme
是file
authority
通常是空的(或是localhost
,但省略时以空值处理)path
表示绝对路径