前言:要搞清楚path.join()和path.resolve的具体作用,最好自己搞个文件,用node跑一遍去测试一下。只有自己亲自动手实践了,才知道具体是怎么回事,才能真正的理解

一、path.join()

使用平台特定的分隔符(unix系统是 ,windows系统是 \ )把全部给定的path片段连接到一起,并规范化生成的路径。若任意一个路径片段类型错误,会报错。

__dirname
// __dirname返回当前文件所在的绝对路径
const path = require('path'); const path1 = path.join(__dirname, '/foo');
const path2 = path.join(__dirname, './foo/bar');
const path3 = path.join('/foo', 'bar', '/baz/apple', 'aaa', '..');
const path4 = path.join('foo', 'bar', 'baz');
const path5 = path.join(__dirname,'../public') //Users/xiao/work/public join碰到../也会跳出 console.log(path1);
console.log(path2);
console.log(path3);
console.log(path4); // 输出结果
/Users/xiao/work/test/foo
/Users/xiao/work/test/foo/bar
/foo/bar/baz/apple
foo/bar/baz

二、path.resolve 

path.resolve方法是把一个路径或路径片段的序列解析为一个绝对路径。例如

const path = require('path');

const path1 = path.resolve('/a/b', '/c/d');
// 结果: /c/d
const path2 = path.resolve('/a/b', 'c/d');
// 输出: /a/b/c/d
const path3 = path.resolve('/a/b', '../c/d');
// 输出: /a/c/d
const path4 = path.resolve('a', 'b');
// 输出: /Users/xiao/work/test/a/b

resolve把 ' / ' 当成根目录,path.resolve()方法可以将多个路径解析为一个规范化的绝对路径。其处理方式类似于对这些路径逐一进行cd操作。

path.resolve('www', 'static', '../public', 'src', '..');
// cd www /Users/xiao/work/test/www
// cd static /Users/xiao/work/test/www/static
// cd ../public /Users/xiao/work/test/www/public 碰到../会跳出
// cd src /Users/xiao/work/test/www/public/src
// cd .. /Users/xiao/work/test/www/public .. 的意思似乎是取消

三、区别

1、join是把各个path片段连接在一起,resolve把' / ' 当成根目录

path.join('/a', '/b');
// /a/b
path.resolve('/a', '/b');
// /b

2.resolve在传入非 / 路径时,会自动加上当前目录形成一个绝对路径,而join仅仅用于路径拼接

// 当前路径为
/Users/xiao/work/test
path.join('a', 'b', '..', 'd');
// a/d
path.resolve('a', 'b', '..', 'd');
// /Users/xiao/work/test/a/d

可以看出resolve在传入的第一个参数为非根路径时,会返回一个带当前目录的绝对路径。

__dirname 表示当前文件所在的目录的绝对路径

process.cwd()  返回运行当前脚本的工作目录的路径

参考:path.join()和path.resolve()的区别

node中__dirname、__filename、process.cwd()、process.chdir()表示的路径

path.resolve和path.resolve的用法的更多相关文章

  1. Mac配置Qt环境——Could not resolve SDK path for 'macosx10.8'

    前言:解决在Mac端安装Qt后,出现的Could not resolve SDK path for 'macosx10.8'的配置信息. 首先,发现问题之前,先搜索一下.但是搜索的结果都是说,找到配置 ...

  2. 小tips:path的join和resolve的使用区别

    1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在 ...

  3. node模块之path——path.join和path.resolve的区别

    1.path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径. 长度为零的 path 片段会被忽略. 如果 ...

  4. path的join和resolve的使用区别

    文章目录   1.连接路径:path.join([path1][, path2][, ...]) 2.路径解析:path.resolve([from ...], to) 3.对比 1.连接路径:pat ...

  5. path的join和resolve

    连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在接边 ...

  6. path.join()与path.resolve()区别

    1.path.resolve([...paths]) path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径. 给定的路径的序列是从右往左被处理的,后面每个 path 被依次 ...

  7. Nodejs中,path.join()和path.resolve()的区别

    在说path.join()和path.resolve()的区别之前,我先说下文件路径/和./和../之间的区别 /代表的是根目录: ./代表的是当前目录: ../代表的是父级目录. 然后再来说下pat ...

  8. path.resolve和path.join的区别

    // test.js const path = require('path') let x1 = path.resolve('/目录1/目录2', '/目录3/目录4/') let x2 = path ...

  9. sys.path.insert(0,"/path") 的用法

    可以选择用sys.path.insert(0,‘/path’),这样新添加的目录会优先于其他目录被import检查

  10. sys.path和os.path

    sys.path和os.path1.sys.path是python搜索模块的路径集合,是个list:os.path是os的一个模块,是操作文件和目录的模块 2.sys.path和PYTHONPATH首 ...

随机推荐

  1. ubuntu18.08安装eigen

    http://eigen.tuxfamily.org/index.php?title=Special%3AAllPages&from=&to=&namespace=100 除非 ...

  2. 【TS】函数重载--可选参数--默认参数

    可选参数--默认参数 在ts中定义的数据类型,某些情况下只需要传入定义数据类型的一部分参数,比如:id .name.age.address,此时需要修改用户的名称,那么只需要传入id.name就够了: ...

  3. C#后缀表达式解析计算字符串公式

    当我们拿到一个字符串比如:20+31*(100+1)的时候用口算就能算出结果为3151,因为这是中缀表达式对于人类的思维很简单,但是对于计算机就比较复杂了.相对的后缀表达式适合计算机进行计算. 我们就 ...

  4. OpenMediaVault5.6(OMV) 安装omv-extras - 2022.1.12

    openmediavault 5.6 安装 omv-extras 转载: csdn:https://blog.csdn.net/Yu1441/article/details/116140034 先ss ...

  5. 斐讯K2刷华硕固件教程

    转载博客园J'KYO: https://www.cnblogs.com/pejsidney/p/12361234.html

  6. CCRD_TOC_2008年第5期

    中信国健临床通讯 2008年第5期 目 录   RA: 临床缓解与亚临床炎症 1.     DMARD诱导缓解的RA患者中仍有影像学确证的亚临床炎症 Brown AK, et al. Arthriti ...

  7. Flutter:StatefulWidget 怎么传参

    定义好一个有状态(或无状态)的组件之后,需要为其传递一些参数,希望组件能够更加灵活使用.那么,在 Flutter 中如何为其传递参数呢? 以下是 StatefulWidget 传递值的步骤,一共三步: ...

  8. PostGIS之地理坐标

    1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...

  9. git手记

    参照的是http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000这里的,git教程确实写得不 ...

  10. Cocos Creator微信登录接入(完全小白教程)(安卓篇)

    1:创建 Creator项目,如下