path.resolve 和 path.join 的区别
path.join和path.resolve函数都允许传入多个字符串,将参数拼接后返回一个路径字符串。
但是在使用他们时,要考虑到其中的区别。
一、path.resolve()方法
我们可以将path.resolve方法解析路径的起点是执行Node命令的工作目录,跟path.resolve方法执行的位置无关,我们且将工作目录称作root。
path.resolve(subpath0, subpath1, subpath2, ...)返回一个路径,该路径相当于不断地执行cd命令,
基于root,先cd subpath0,然后cd subpath1,再不断cd,最后返回切换到的所在目录。
❗ 需要注意的是,如果参数中有以磁盘X:或/开头的字符串,则将会切换到平台的根目录下。
当然 path.resolve方法不会真的去切换目录,上面这段话会帮助我们理解path.resolve的算法。
⭐ 例子:
假设当前工作目录为E:\, 同时E:\test\index.js中的内容如下:
console.log( path.resolve() );
console.log( path.resolve('foo', 'bar') );
console.log( path.resolve('foo', '.') );
console.log( path.resolve('foo', '/bar'));
console.log( path.resolve('foo', 'bar', '..'));
console.log( path.resolve('C:\\dist', 'img'));
执行 node ./test/index.js,输出结果如下:
console.log( path.resolve() ); // 输出👉 "E:\\"
console.log( path.resolve('foo', 'bar') ); // 输出👉 "E:\\foo\\bar"
console.log( path.resolve('foo', '.') ); // 输出👉 "E:\\foo"
console.log( path.resolve('foo', '/bar')); // 输出👉 "E:\\bar"
console.log( path.resolve('foo', 'bar', '..')) // 输出👉 "E:\\foo"
console.log( path.resolve('C:\\dist', 'img')); // 输出👉 "C:\\dist\\img"
二、path.join()方法
该方法只是将参数中的路径进行智能拼接,每个字符串参数最前面的/不起作用,会被认为是上一级目录。
path.join方法解析的起点会变化:
如果第一个参数是以磁盘根路径开头的绝对路径,则path.join解析的起点为第一个参数路径。
如果第一个参数是以根路径/开头的绝对路径,则path.join解析的起点为第一个参数路径。
如果第一个参数不是以根路径开头的绝对路径,则path.join解析的起点为当前目录,即"."。
// 没有参数
console.log( path.join() ); // 输出👉 "."
// 以相对路径foo作为第一个参数
console.log( path.join('foo', 'bar') ); // 输出👉 "foo\\bar"
// "/bar" 前的斜杠无效
console.log( path.join('foo/', '/bar') ); // 输出👉 "foo\\bar"
// 以linux下根路径/foo/作为第一个参数。
console.log( path.join('/foo/', 'bar') ); // 输出👉 '\\foo\\bar'
// 以点号作为第一个参数
console.log( path.join('.', 'foo') ); // 输出👉 "foo"
// 以上一级目录作为第一个参数
console.log( path.join('..', 'foo')); // 输出👉 "..\\foo"
// 以上一级目录作为参数
console.log( path.join('foo/', '/bar', '..')) // 输出👉 "foo"
// windows下绝对路径作为参数
console.log( path.join('C:\\dist', 'img')); // 输出👉 "C:\dist\img"
console.log( path.join('foo', 'C:\\')); // 输出👉 "foo\\C:\\"
本文详细介绍了Node.js中path.resolve和path.join两个函数的使用区别。path.resolve从当前工作目录开始,模拟连续的cd命令,最终得到一个绝对路径;而path.join只是简单地将路径字符串拼接,不考虑相对路径。通过实例展示了两者在不同情况下的输出结果,帮助读者理解这两个函数的工作原理。
8085

被折叠的 条评论
为什么被折叠?



