-
__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 模块中的方法,用于对 给定路径 字符串进行解析,并返回路径的目录部分。返回值类型:
stringconst 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.jsapp.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或fileauthority通常包括主机名,例如example.com或文件系统的主机表示path是资源的位置对于
file://协议:
scheme是fileauthority通常是空的(或是localhost,但省略时以空值处理)path表示绝对路径