首页 > 其他分享 >path.resolve、path.join、path.posix.join对比分析以及适用场景举例

path.resolve、path.join、path.posix.join对比分析以及适用场景举例

时间:2024-04-21 22:45:19浏览次数:27  
标签:片段 resolve join 路径 posix path

path.resolve、path.join、path.posix.join对比分析以及适用场景举例

path.resolvepath.joinpath.posix.join 都是 Node.js 中用于处理和操作文件路径的方法,但它们各自有特定的功能和使用场景。以下是它们的对比分析和适用场景举例:

1. path.resolve([...paths])

功能

  • path.resolve 方法接收一组路径片段作为参数,并尝试将它们解析为一个绝对路径。解析过程遵循以下规则:
    • 如果参数列表中的第一个路径片段不是以 / 开始的绝对路径,那么当前工作目录(process.cwd())会被作为起始路径。
    • 后续的路径片段按照从左到右的顺序进行拼接。如果某个片段以 / 开始,那么它会被视为相对于根目录的路径,前面所有片段将被忽略。
    • 最终返回的路径是规范化后的绝对路径,其中包含适当的斜杠分隔符(/),且没有多余的... 符号。

适用场景

  • 构建绝对路径:当你需要根据相对路径和其他路径片段构建一个绝对路径时,使用 path.resolve 能确保得到的结果始终是绝对路径。
    const absolutePath = path.resolve('project', 'src', 'index.js');
    // 假设当前工作目录为 /home/user/projects
    // 输出:/home/user/projects/project/src/index.js
    
  • 处理用户输入或外部资源的路径:当用户或外部系统提供的路径可能是相对路径或包含特殊符号(如 ...)时,使用 path.resolve 可确保生成正确的绝对路径。
    const userSuppliedPath = path.resolve('..', 'data', 'file.txt');
    // 不管当前工作目录如何,都会正确解析到上级目录的"data/file.txt"
    

2. path.join([...paths])

功能

  • path.join 方法同样接收一组路径片段作为参数,但它不关心路径的绝对性,仅负责将这些片段使用适当的斜杠分隔符拼接成一个路径字符串。
    • 不会添加额外的分隔符,即使输入的路径片段以 / 结尾或开始。
    • 不会处理路径中的 ... 符号,只是简单地拼接。

适用场景

  • 内部路径拼接:在应用程序内部,当你需要将已知的路径片段(如固定的目录名和文件名)拼接成一个路径字符串时,path.join 是理想的选择。
    const localResourcePath = path.join('assets', 'images', 'logo.png');
    // 输出:assets/images/logo.png
    
  • 避免平台差异path.join 会自动使用当前操作系统所对应的路径分隔符(Windows 上是 \,Unix-like 系统上是 /),确保跨平台代码的一致性。

3. path.posix.join([...paths])

功能

  • path.posix.join 是专门为遵循 POSIX 规范的路径操作设计的方法。它与 path.join 功能类似,也是将路径片段拼接成一个字符串,但始终使用正斜杠 / 作为分隔符,无论运行环境为何。

适用场景

  • 跨平台但要求统一路径风格:如果你的代码需要在不同操作系统上运行,但希望生成的路径始终使用 POSIX 风格(即使用 / 分隔),则使用 path.posix.join
    const posixStylePath = path.posix.join('dir', 'subdir', 'file.ext');
    // 在所有平台上输出:dir/subdir/file.ext
    
  • 处理网络路径、URL 或需要遵循 POSIX 规范的特定文件系统:在处理这类路径时,通常要求使用 / 作为分隔符,此时 path.posix.join 更为合适。

总结

  • path.resolve 用于将一组路径片段解析成绝对路径,考虑了工作目录、/ 的特殊意义以及 ... 的处理。
  • path.join 仅负责将路径片段拼接成一个路径字符串,不关心绝对性,也不处理 ...,适合内部路径构造。
  • path.posix.joinpath.join 类似,但强制使用 POSIX 风格(即 / 分隔符),适用于需要跨平台但保持路径风格统一的场景。

标签:片段,resolve,join,路径,posix,path
From: https://www.cnblogs.com/longmo666/p/18149659

相关文章

  • Codeforces 954H Path Counting
    令输入的为\(a'\),同时\(a'_0=1\)。对其做一个前缀积\(a_i=\prod\limits_{i=0}^ia'_i\),对于\(i\gen\),认为\(a_i=0\)。那么\(a_i\)就相当于是深度\(i+1\)的点的个数。同时也可以得到根的深度为\(l\)时子树内深度为\(r\)的深度的点数为\(\dfrac{a_{r-......
  • ABC 287 C - Path Graph?
    题目链接:首先根据条件$-对于所有i=1,2,…,N−1,有一条边连接顶点v_i$和\(v_{i+1}\)可以得到,路径图必须有\(N-1\)条边。其次,Ifintegers\(i\)and\(j\)satisfies\(1\leqi,j\leqN\)and\(|i-j|\geq2\),thenthereisnoedgethatconnectsvertices\(......
  • dbt asset-paths 简单说明
    dbt的asset-paths是一个比较有意思的配置,可以用来增强我们的文档信息,比如存放一些图片在资源描述中引用资源生成的文档中可以进行显示,提示文档的信息参考配置dbt_project.ymlasset-paths:["assets"]使用假如assets包含一些描述图片信息models/ap......
  • k8s join失败的问题汇总
     环境:centos7.6;kubeadm安装k8s集群(版本v1.26.0);容器引擎对应cri-dockerd-0.3.1-3.el7.x86_64.rpm(这里其实还发生一件事,装k8s1.25的时候,容器引擎太低,导致无法识别,于是换了个新版本的)报错一:FileContent--proc-sys-net-ipv4-ip_forward]:/proc/sys/net/ipv4/ip_forwardcont......
  • [ABC232G] Modulo Shortest Path (优化建图)
    链接:https://www.luogu.com.cn/problem/AT_abc232_g暴力的做法肯定不行,这道题要用到一个比较经典的拆点操作:把一个点拆成内点和外点。在接下来的分析中会慢慢介绍。由于题目每次连的边都是单向边,那要考虑的问题是:比如说现在要从1走到3,怎么走才能与暴力建边等价。先不考虑取模这......
  • .net 6 C#中System.IO.Path类的用法
    1.说明/*PerformsoperationsonSystem.Stringinstancesthatcontainfileordirectorypathinformation.Theseoperationsareperformedinacross-platformmanner.对系统执行操作。包含文件或目录的字符串实例路径信息。这些操作是以跨平台的方式执行的。*/......
  • Failed to resolve loader: sass-loader
    错误现象:原因是工程里缺少sass-loader和node-sass依赖,需要安装。sass-loader的作用:>https://www.sass.hk/docs/#google_vignetteSass是一款强化CSS的辅助工具,它在CSS语法的基础上增加了变量(variables)、嵌套(nestedrules)、混合(mixins)、导入(inlineimports)......
  • AT_abc211_d [ABC211D] Number of Shortest paths 题解
    题目简述给定一张$n$个点$m$条边的无向无权图,问从$1$到$n$的最短路有多少条。题目分析设$cnt_i$表示从$1$到$i$的最短路条数,$dis_i$表示最短路。这道题可以考虑使用BFS做,对于一个点$v$,设第一次更新它的点为$u$,则它的转移应为$cnt_v\leftarrowcnt_u$并......
  • [ABC208D] Shortest Path Queries 2 题解
    [ABC208D]ShortestPathQueries2题解思路解析此题的本质其实就是Floyd。我们在进行Floyd时会有一个\(k\)充当中间点,可见这里的\(k\)就等于题目当中的\(k\),因为小于等于\(k\)的所有点都被当作过中间点转移过,而大于\(k\)的所有点都没有被当作过中间点转移过,于是直......
  • Python中pathlib 模块的用法
    pathlib模块提供了表示文件系统路径的类,可适用于不同的操作系统。使用pathlib模块,相比于os模块可以写出更简洁,易读的代码。pathlib模块中的Path类继承自PurePath,对PurePath中的部分方法进行了重载,相比于os.path有更高的抽象级别。本文将带你学习如何使用pathlib......