Answers:
这两个函数处理以/不同方式开头的段。join只会将它与前一个参数连接在一起,但是resolve会将其视为根目录,并忽略所有先前的路径-将其视为cd与每个参数一起执行的结果:
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'
需要注意的另一件事是,path.resolve它将始终导致一个绝对URL,并且将使用您的工作目录作为解析此路径的基础。但是,__dirname无论如何,这都是一条绝对路径,这对您而言并不重要。
至于您应该使用哪一个,答案是:这取决于您希望段开始的/行为-应该将它们简单地连接还是作为新的根?
如果其他参数是经过硬编码的,则实际上并不重要,在这种情况下,您应该考虑(a)此行将来可能如何更改,以及(b)与代码中其他位置的一致性如何。
path.join('/a', '/b', 'c')将返回/a/b/c,而path.resolve('/a', '/b', 'c')将返回/b/c。
resolve不是最清楚,path.cd([starting dir], [final dir])会更直观。
think of it as the result of executing cd with each argument让我终于明白了。谢谢
文件系统路径的默认操作因操作系统而异,我们需要一些对其进行抽象的东西。该path模块提供了用于处理文件和目录路径的实用程序或API。您可以使用将其包含在您的项目中
const path = require('path');
的path.join和path.resolve是路径模块的两个不同的方法。
这两种方法都接受一系列路径或路径段。
该path.resolve()方法将一系列路径或路径段解析为绝对路径。
该path.join()方法使用平台特定的分隔符作为分隔符,将所有给定的路径段连接在一起,然后对结果路径进行规范化。
为了更好地理解和区分行为,让我在不同的情况下进行解释。
1.如果我们不提供任何参数或为空字符串
就我而言,我的文件名是index.js,当前工作目录是E:\MyFolder\Pjtz\node
const path = require('path');
console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname of the node process
并在运行结果如下
λ node index.js
path.join() : .
path.resolve() : E:\MyFolder\Pjtz\node
以上实验的推论是该path.resolve()方法将输出绝对路径作为path.join()返回。表示当前工作目录或相对路径(如果未提供任何内容)
2.添加/ path作为任何参数。
const path=require('path');
console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));
结果是
λ node index.js
path.join() : abc\bcd
path.resolve() : E:\bcd
我们可以从该实验中找到的推论是,path.join()仅将输入列表与特定于平台的分隔符连接起来,而同时path.resolve()处理从右到左的路径顺序,每个后续路径都被添加到构造绝对路径之前。
path.join()将每个参数与操作系统特定的分隔符连接起来,同时path.resolve()将使用root解析每个参数并产生输出。
path.resolve()是不是等同于__dirname。第一个返回工作目录,第二个返回当前文件的路径。
const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
path.resolve() is equivalent to __dirname
1)path.resolve创建绝对路径。
该方法从右到左创建绝对路径,直到构造了绝对路径。
例如:
path.resolve('/a', 'b', 'c'); // C:\a\b\c
path.resolve('/a', '/b', 'c'); // C:\b\c
path.resolve('/a', '/b', '/c'); // C:\c
如果未生成绝对路径,则使用当前工作目录的方法:
例如:
path.resolve('a', 'b', 'c'); // C:\{current_working_directory}\a\b\c
2)path.join连接所有路径并归一化结果
例如:
path.join('/a', '/b', '/c'); // \a\b\c
path.join('/a', '/b', 'c'); // \a\b\c
path.join('/a', 'b', 'c'); // \a\b\c
path.join('a', 'b', 'c'); // \a\b\c
path.join('a','b','c')应为a\b\c。