浅谈Node.js中的path模块和常用方法

本篇文章带大家了解一下node.js中的 path 模块,介绍一下 path 模块的用法,以及常用的 path 方法。

浅谈Node.js中的path模块和常用方法

Node.js path 模块是一个内置模块,可帮助您以独立于操作系统的方式使用文件系统路径。如果要构建支持 OSX、Linux 和 Windows 的 CLI 工具,则 Path 模块是必不可少的。【推荐学习:《nodejs 教程》】

即使您正在构建一个只在 Linux 上运行的后端服务,path 模块仍然有助于在操作路径时避免边缘情况。

下面我们将描述一些使用 path 模块的常见模式,以及为什么您应该使用 path 模块而不是将路径操纵成字符串。

在 Node 中使用 Path 模块

path 模块中最常用的方法是 path.join()。该方法将一个或多个路径段合并为一个字符串,如下所示:

const path = require('path')path.join('/path', 'to', 'test.txt') // '/path/to/test.txt'

您可能想知道为什么要使用 path.join() 方法而不是字符串拼接。

'/path' + '/' + 'to' + '/' + 'test.txt' // '/path/to/test.txt'['/path', 'to', 'test.txt'].join('/') // '/path/to/test.txt'

原因主要有两个:

对于 Windows 支持。Windows 使用反斜杠()而不是正斜杠(/)作为路径分隔符。path.join() 会为我们处理此问题。因为 path.join('data', 'test.txt') 在 Linux 和 OSX 以及 Windows 上都会返回 'data/test.txt'用于处理边缘情况。使用文件系统路径时,会弹出许多边缘情况。例如,如果您尝试手动连接两个路径,您可能会意外地得到重复的路径分隔符。path.join() 方法为我们处理开头和结尾的斜杠,如下所示:

path.join('data', 'test.txt') // 'data/test.txt'path.join('data', '/test.txt') // 'data/test.txt'path.join('data/', 'test.txt') // 'data/test.txt'path.join('data/', '/test.txt') // 'data/test.txt'

常用的 Path 方法

path 模块还具有几个用于提取路径组件的方法,例如文件扩展名或目录。

path.extname() 方法以字符串形式返回文件扩展名:

path.extname('/path/to/test.txt') // '.test'

就像连接两条路径一样,获取文件扩展名比最初看起来要复杂。

如果 path 以 . 为结尾,将返回 .。如果文件无扩展名,又不以 . 结尾,或文件没有扩展名,将返回空值。

path.extname('/path/to/index.') // '.'path.extname('/path/to/README') // ''path.extname('/path/to/.gitignore') // ''

path 模块还有 path.basename()path.dirname() 方法,分别获取文件名(包括扩展名)和目录。

path.basename('/path/to/test.txt') // 'test.txt'path.dirname('/path/to/test.txt') // '/path/to'

path.parse() 方法返回一个对象,该对象包含分为五个不同组件的路径,包括扩展名和目录。path.parse() 方法也是不带任何扩展名获取文件名的方法。

path.parse('/path/to/test.txt')/*{  root: '/',  dir: '/path/to',  base: 'test.txt',  ext: '.txt',  name: 'test'}*/

使用 path.relative()

path.join()path.extname() 这样的方法涵盖了大多数使用文件路径的用例。但是 path 模块有几个更高级的方法,例如 path.relative()

Find JSON Path Online Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30 查看详情 Find JSON Path Online

path.relative(from, to) 方法根据当前工作目录返回从 from 到 to 的相对路径。 如果 from 和 to 都解析为相同的路径(在分别调用 path.resolve() 之后),则返回零长度字符串。

// 返回相对于第一条路径的第二条路径的路径path.relative('/app/views/home.html', '/app/layout/index.html') // '../../layout/index.html'

如果给定了相对于一个目录的路径,但需要相对于另一个目录的路径,则 path.relative() 方法非常有用。例如,流行的文件系统监视库 Chokidar 提供了相对于监视目录的路径。

const watcher = chokidar.watch('mydir')// 如果用户添加 mydir/path/to/test.txt,则会打印 mydir/path/to/test.txtwatcher.on('add', path => console.log(path))

这就是为什么大量的使用 Chokidar 工具。如常见的 Gatsby 或 webpack,其在内部也大量使用 path.relative() 方法。

例如,Gatsby 使用 path.relative() 方法帮助同步静态文件目录。

export const syncStaticDir = (): void => {  const staticDir = nodePath.join(process.cwd(), `static`)  chokidar    .watch(staticDir)    .on(`add`, path => {      const relativePath = nodePath.relative(staticDir, path)      fs.copy(path, `${process.cwd()}/public/${relativePath}`)    })    .on(`change`, path => {      const relativePath = nodePath.relative(staticDir, path)      fs.copy(path, `${process.cwd()}/public/${relativePath}`)    })}

现在,假设用户向 static 目录添加了一个新文件 main.js。Chokidar 调用 on('add') 事件处理程序,路径设置为 static/main.js。但是,当您将文件复制到 /public 时,不需要额外的 static/

调用 path.relative('static', 'static/main.js') 返回 static/main.js 相对于 static 的路径,这正是您想要将 static 的内容复制到 public 的路径。

跨操作系统路径和 URL

默认情况下,path 模块会根据 Node 进程运行的操作系统自动在 POSIX(OSX、Linux)和 Windows 模式之间切换。

但是,path 模块确实可以在 POSIX 上使用 Windows path 模块,反之亦然。path.posixpath.win32 属性分别包含 path 模块的 Posix 和 Windows 版本。

// 返回 'pathtotest.txt',与操作系统无关path.win32.join('path', 'to', 'test.txt')// 返回 'path/to/test.txt',与操作系统无关path.posix.join('path', 'to', 'test.txt')

在大多数情况下,根据检测到的操作系统自动切换 path 模块是正确的行为。但是,使用 path.posixpath.win32 属性对于总是希望输出 Windows 或 Linux 样式路径的测试或应用程序可能会有所帮助。

例如,一些应用程序使用 path.join()path.extname() 等方法处理 URL 路径。

// 'https://api.mydomain.app/api/v2/me''https://api.mydomain.app/' + path.join('api', 'v2', 'me')

这种方法适用于 Linux 和 OSX,但如果有人试图将您的应用程序部署到一些无服务器上会发生什么?

你最终会得到 https://api.mydomain.app/apiv2me,这不是有效的 URL!如果使用 path 模块操作 URL,则应使用 path.posix

原文地址:https://juejin.cn/post/6997799224213504037作者:lio_zero

更多编程相关知识,请访问:编程视频!!

以上就是浅谈Node.js中的path模块和常用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/561549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 01:17:08
下一篇 2025年11月10日 01:21:15

相关推荐

  • 如何冻结项目依赖并分享给团队

    答案:通过生成并提交依赖锁定文件、纳入版本控制、提供清晰安装说明及定期同步更新,可确保团队开发环境一致。例如Python用pip freeze生成requirements.txt,Node.js使用package-lock.json或yarn.lock,Go通过go.mod和go.sum锁定版本,均…

    2025年12月14日
    000
  • Node.js与Python进程通信:实时获取子进程输出的策略

    当node.js使用`child_process.spawn`执行python脚本时,常遇到stdout输出被缓冲,导致无法实时获取数据的问题。本文将深入解析python标准输出的缓冲机制,并提供两种高效解决方案:一是通过在python `print`函数中添加`flush=true`参数强制刷新缓…

    2025年12月14日
    000
  • Python 项目环境配置的最佳文档写法

    明确Python版本、依赖管理工具及系统要求;2. 按步骤列出克隆、虚拟环境、依赖安装与配置流程;3. 分开发、测试、生产环境说明依赖差异;4. 提供验证命令与常见问题解决方案,确保可操作性。 Python 项目环境配置的最佳文档写法 一个清晰、实用的 Python 项目环境配置文档,能极大降低新成…

    2025年12月14日
    000
  • Python 环境如何与 Node.js 并存

    Python 和 Node.js 可在同一台机器上共存,因二者运行时和包管理独立。1. 分别从官方渠道安装 Python 和 Node.js,确保 PATH 正确;2. 使用 pyenv 和 nvm 管理多版本切换,互不干扰;3. 通过 venv 和 node_modules 隔离项目依赖,避免冲突…

    2025年12月14日
    000
  • Node.js版本升级后node-gyp构建错误及解决方案

    本文旨在解决node.js版本升级至20.9.0后,执行`npm install`时遇到的`node-gyp`构建错误,特别是涉及`fetcherror`导致无法下载node.js头文件的问题。文章将分析错误根源,并提供使用yarn作为有效替代方案,同时探讨其他通用的`node-gyp`故障排除策略…

    2025年12月14日
    000
  • Node.js 版本升级中 node-gyp 错误排查与 Yarn 解决方案

    在将 Node.js 版本升级至 20.9.0 等新版本时,开发者常遇到 `node-gyp` 编译原生模块的错误,尤其表现为 Python 环境配置不当或网络下载 Node.js 头文件失败。本文将深入分析这些错误的原因,提供 Python 和构建工具的排查方法,并重点介绍如何通过切换到 Yarn…

    2025年12月14日
    000
  • Node.js版本升级中Node-gyp错误解析与解决方案

    针对node.js版本升级(特别是node 20.9.0)过程中常见的node-gyp编译错误,本教程深入分析了其潜在原因,包括网络连接问题、tls证书验证失败以及python环境配置不当。文章重点推荐使用yarn作为解决依赖冲突和构建问题的有效策略,并提供了其他针对性排查和修复建议,旨在帮助开发者…

    2025年12月14日
    000
  • 在IIS 10上部署FastAPI应用:完整教程

    本教程详细指导如何在Windows Server 2019上的IIS 10环境中部署Python FastAPI应用程序。我们将涵盖从Python和HTTP Platform Handler的安装、FastAPI项目的构建、IIS应用程序池和网站配置、到关键的文件权限设置,确保您的FastAPI应用…

    2025年12月14日
    000
  • VS Code Python单文件运行故障排除与配置指南

    本文旨在解决Visual Studio Code中Python单文件无法通过终端正常运行的问题。我们将探讨两种解决方案:首先是简单的关闭工作区操作,适用于临时性问题;更根本的解决之道是配置项目的launch.json文件,通过明确定义Python运行配置,确保无论在何种情境下,单文件都能稳定地在集成…

    2025年12月14日
    000
  • 解决VS Code中Python文件无法独立运行于终端的常见问题

    本教程旨在解决Visual Studio Code中Python文件无法在集成终端独立运行,但可在文件夹/工作区内正常运行的问题。核心解决方案是配置或优化工作区内的launch.json文件,确保为Python文件提供正确的启动配置,从而实现一致且可靠的代码执行体验,避免不必要的重装和调试困扰。 问…

    2025年12月14日
    000
  • 如何在一台电脑上安装多个 Python 解释器

    可通过安装多个Python版本并使用py启动器或pyenv管理,配合虚拟环境隔离依赖,实现多版本共存与项目适配。 在一台电脑上安装多个 Python 解释器非常常见,尤其在开发不同项目时,可能需要使用不同版本的 Python。以下是一些实用方法,帮助你在同一台机器上管理多个 Python 版本。 使…

    2025年12月14日
    000
  • Python怎么处理API返回的JSON数据_json模块解析API响应数据

    Python通过json模块将API返回的JSON数据解析为字典或列表,便于访问和操作。首先使用requests库发送HTTP请求并获取响应,调用response.json()自动解析JSON;若为JSON字符串,则用json.loads()转换。处理时需注意错误捕获、键是否存在及数据类型验证。对于…

    2025年12月14日
    100
  • 使用 Node.js 连接 LDAP 进行 NTLM 身份验证

    本文档介绍了如何在 Node.js 中使用 LDAP 协议结合 NTLM 身份验证,通过服务账号绑定和用户DN检索的方式实现用户登录验证。文章将详细阐述连接 LDAP 服务器、搜索用户 DN 以及验证用户密码的步骤,并提供相应的代码示例,帮助开发者理解并实现基于 LDAP 的用户身份验证功能。 在 …

    2025年12月14日
    000
  • Python怎么将字典写入JSON文件_Python字典转JSON文件存储方法

    Python字典转JSON文件广泛用于数据持久化、跨语言交换和配置管理,通过json.dump()直接写入文件或json.dumps()生成字符串再存储,结合ensure_ascii=False、indent格式化及default参数处理中文、美观输出与非标准类型,兼顾效率与可读性。 Python要…

    2025年12月14日
    000
  • macOS下NVM安装后command not found问题的排查与解决

    本文针对macOS用户在使用Homebrew安装NVM后,出现nvm: command not found的问题,提供了详细的解决方案。核心在于正确配置shell环境,通过在.zshrc或.bashrc文件中添加source ~/.nvm/nvm.sh命令,确保NVM脚本被加载,从而使NVM命令生效…

    2025年12月14日
    000
  • 解决macOS上NVM安装后nvm命令无效的问题

    在macOS上通过Homebrew安装NVM后,若遇到nvm: command not found错误,这通常是由于NVM脚本未被正确加载到shell环境中。本文将详细指导如何通过配置shell启动文件(如.zshrc或.bash_profile)来正确加载NVM,从而解决NVM命令无法识别的问题,…

    2025年12月14日
    000
  • 在 macOS 上安装 NVM 后提示已安装但命令无法识别的解决方案

    本文旨在解决在 macOS 上使用 Homebrew 安装 NVM (Node Version Manager) 后,提示已安装但 nvm 命令无法识别的问题。主要原因是缺少环境变量配置,导致 shell 无法找到 NVM 的可执行文件。本文将详细介绍如何正确配置 NVM,使其能够正常工作。 在使用…

    2025年12月14日
    000
  • 使用 NVM 时 “command not found” 问题的解决方案

    本文旨在解决在 macOS 上安装 NVM (Node Version Manager) 后,出现 “command not found: nvm” 错误的问题。通过明确问题原因,提供详细的解决方案,帮助开发者正确配置 NVM,从而顺利管理 Node.js 版本。本文重点在于…

    2025年12月14日
    000
  • PostgreSQL处理超万列CSV数据:JSONB与GIN索引的实践指南

    本文旨在解决将包含超万列的CSV数据导入PostgreSQL时遇到的列限制问题。通过采用jsonb数据类型存储不常用或次要列,并结合GIN索引优化查询性能,本教程提供了一种高效、灵活的数据管理方案,避免了传统关系型数据库的列数限制,同时确保了数据的可查询性和可维护性。 挑战:PostgreSQL的列…

    2025年12月14日
    000
  • PostgreSQL超万列CSV数据高效管理:JSONB方案详解

    面对拥有超过一万列的CSV数据,传统关系型数据库的列限制和管理复杂性成为挑战。本文将介绍一种利用PostgreSQL的jsonb数据类型来高效存储和管理海量稀疏列数据的方案。通过将核心常用列独立存储,而不常用或次要的列聚合为JSON对象存入jsonb字段,结合GIN索引优化查询,实现数据的高效导入、…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信