樊建峰 發表於 2023-11-16 11:17:00

【Node.js】Node.js中path.resolve与path.join的区别与作用详解

<p>&nbsp;</p>
<h3>前言:</h3>
<p>1、path 模块,node自带模块,用于处理文件和目录的路径的实用工具,使用前需先引入模块 <span class="hljs-keyword">const path = <span class="hljs-built_in">require(<span class="hljs-string">'path') </span></span></span></p>
<p><span class="hljs-keyword"><span class="hljs-built_in"><span class="hljs-string">2、当前文件路径 和 当前工作目录,例如:1、 E:\vue2-starter&gt;node ../path.js(E:\vue2-starter表示<span style="color: rgba(255, 153, 0, 1); background-color: rgba(255, 255, 255, 1)"><strong>工作目录</strong></span>,E:\path.js则是<strong><span style="color: rgba(255, 153, 0, 1)">文件路径,</span></strong><span style="color: rgba(255, 153, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">E:\&gt;node path.js(E:\表示工作目录路径,E:\path.js是文件路径)</span></span>)</span></span></span></p>
<p><span class="hljs-keyword"><span class="hljs-built_in"><span class="hljs-string">3、node自带的全局变量,__dirname (<strong><span style="color: rgba(255, 153, 0, 1)">文件目录</span></strong>)&nbsp; &nbsp;__filename(<strong><span style="color: rgba(255, 153, 0, 1)">文件路径</span></strong>)</span></span></span></p>
<p><span class="hljs-keyword" style="color: rgba(0, 0, 0, 1)"><span class="hljs-built_in"><span class="hljs-string"><span class="hljs-comment">// index.js 位于E:\, 运行在E:\下运行node index(与在E:\vue2-starter运行node ../index并无不同)</span></span></span></span></p>
<p><span class="hljs-keyword" style="color: rgba(0, 0, 0, 1)"><span class="hljs-built_in"><span class="hljs-string"><span class="hljs-comment"> <span class="hljs-variable language_">console.<span class="hljs-title function_">log(__dirname) <span class="hljs-comment">// e:\,文件目录名 <span class="hljs-variable language_">console.<span class="hljs-title function_">log(__filename) <span class="hljs-comment">// e:\index.js ,文件路径 <span class="hljs-comment">//</span></span></span></span></span></span></span></span></span></span></span></p>
<p><span class="hljs-keyword" style="color: rgba(0, 0, 0, 1)"><span class="hljs-built_in"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-variable language_"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-variable language_"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-comment">4、绝对路径, 可以用path.isAbsolute(path)进行判断 </span></span></span></span></span></span></span></span></span></span></span></p>
<p><span class="hljs-keyword" style="color: rgba(0, 0, 0, 1)"><span class="hljs-built_in"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-variable language_"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-variable language_"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment">//绝对路径: ‘/app’(在windows下会在前面加上盘符)、‘C:\app\state’(windows)’ </span></span></span></span></span></span></span></span></span></span></span></span></p>
<p><span class="hljs-keyword" style="color: rgba(0, 0, 0, 1)"><span class="hljs-built_in"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-variable language_"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-variable language_"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment">//非绝对路径:‘app/state’、 ‘.’</span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p><span class="hljs-keyword" style="color: rgba(0, 0, 0, 1)"><span class="hljs-built_in"><span class="hljs-string">5、path的处理方式</span></span></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">path.join():用于链接路径,并且会<strong>自动转换当前系统路径</strong>的分隔符"/"或"\",Unix系统是"/",Windows系统是"\"</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">path.resolve():也是用于链接路径,但却和path.join()方法却很多不同,而且path.resolve()方法本身就自带一个to的绝对路径参数,也会<strong>自动转换分隔符</strong>,在某些场景用起来也方便很多;</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">__dirname:是node的一个全局变量,获得当前文件所在目录的完整目录名,搭配path一起使用;</span></p>
<p>&nbsp;</p>
<h3><strong><span style="color: rgba(255, 0, 0, 1)">一、关于 path.resolve() 的使用</span></strong></h3>
<p><strong>语法</strong>:<strong>path.resolve(, to)</strong></p>
<p><strong><strong>用法:</strong></strong>将&nbsp;<strong>to</strong>&nbsp;参数解析为绝对路径,给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。 例如,给定的路径片段的序列为:/foo、/bar、baz,则调用 path.resolve('/foo', '/bar', 'baz') 会返回 /bar/baz。</p>
<p><strong>简要理解</strong>:</p>
<p>1、给定的路径序列会<strong>从右到左</strong>进行处理,后面的每个&nbsp;<code>path</code>&nbsp;会被追加到前面,<strong>直到构造出绝对路径</strong>。</p>
<p>2、如果在处理完所有给定的&nbsp;<code>path</code>&nbsp;片段之后<strong>还未生成绝对路径</strong>,则会在前面添加当前<strong>工作目录</strong>。</p>
<p>3、生成的路径会被规范化,并且<strong>尾部的斜杠会被删除</strong>(除非路径被解析为根目录)。</p>
<p>4、如果没有传入&nbsp;<code>path</code>&nbsp;片段,则&nbsp;<strong><code>path.resolve()</code>&nbsp;会返回当前工作目录的绝对路径。</strong></p>
<div class="cnblogs_code">
<pre>console.log(path.resolve(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/index</span><span style="color: rgba(128, 0, 0, 1)">'</span>)) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 盘符:\index</span>
console.log(path.resolve(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">index</span><span style="color: rgba(128, 0, 0, 1)">'</span>)) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当前工作目录的绝对路径/index</span>
console.log(path.resolve(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/app</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">index/</span><span style="color: rgba(128, 0, 0, 1)">'</span>)) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 盘符:\app\index</span>
console.log(path.reolve())<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当前工作目录的绝对路径</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>案例一:</p>
<p>演示当"path"路径<span style="color: rgba(255, 0, 0, 1)"><strong>为空</strong></span>时,得到结果是当前文件所在的绝对路径,类似<strong><span style="color: rgba(255, 0, 0, 1)"> __dirname</span> </strong>;</p>
<div class="jb51code">
<div id="highlighter_273375" class="syntaxhighlighterjs">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.resolve());
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(__dirname);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path</span></pre>
</div>
<p>&nbsp;</p>
<p>案例二:</p>
<p>演示字符以 ./ 开头或者没有字符时,得到的结果是加不加 ./ 都不影响路径的拼接;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.resolve());
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\c\b\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\c\b\a</span></pre>
</div>
<p>案例三:&nbsp;</p>
<p>演示字符以 / 开头,path.resolve()的特点之一就是碰到"/"斜杆则会直接跳转到E盘的根路径(在哪个盘运行就是哪个盘),这里跟在终端输出cd /是一样的原理,也会跳转到E盘的根路径;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.resolve());
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\a\b\c
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\b\c
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\a</span></pre>
</div>
<p>&nbsp;</p>
<p>案例四:</p>
<p>演示字符以../开头,也就是上一层的意思,path.resolve()会把下个要拼接的"path"路径给覆盖掉;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.resolve());
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\c\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\c\b\a</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;案例五:</p>
<p>演示path.resolve()搭配__dirname变量</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
console.log(path.resolve(__dirname,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,__dirname));
console.log(path.resolve(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.resolve(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,__dirname));

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path</span></pre>
</div>
<p>从案例五例子可以看出,</p>
<p>一、__dirname变量需放在第一个,否则会覆盖在它之前的'path'路径,包括斜杠' / ',</p>
<p>二、__dirname之后也不能出现' / ',不然也覆盖之前的路径;</p>
<p>&nbsp;</p>
<p><strong>总结:</strong><br>path.resolve("./path")的特性有以下几点:</p>
<p>从右往左读取"path"路径,并开始拼接,本身就自带绝对路径参数 "to" ;<br>当"path"路径为空时,则会直接获取当前文件所在的绝对路径;<br>当遇到字符以 ./ 开头或者没有字符,则正常拼接,所以可省略不加字符;<br>当遇到字符以 / 开头,则不会拼接到前面的路径并以自身所在盘为根路径加以拼接;<br>当遇到字符以 ../ 开头,则会将下一个要拼接"path"路径给覆盖,然后继续往左拼接;<br>搭配__dirname时,需将放置第一位,且与 ' / ' 有互相覆盖的冲突;<br><br></p>
<h3><strong><span style="color: rgba(255, 0, 0, 1)">二、关于 path.join() 的使用</span></strong></h3>
<p>语法:<strong>path.join([, path2][, ...])</strong></p>
<p><strong>用法:用于</strong>连接路径</p>
<p>简要理解:1、<code>path.join()</code>&nbsp;方法会将<strong>所有</strong>给定的&nbsp;<code>path</code>&nbsp;片段连接到一起(使用平台特定的分隔符作为定界符),然后<strong>规范化生成</strong>的路径。</p>
<div class="cnblogs_code">
<pre>path.join(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/目录1</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">目录2</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">目录3/目录4</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">目录5</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">..</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回: '/目录1/目录2/目录3/目录4'(windows下:盘符:\录1\目录2\目录3\目录4)</span></pre>
</div>
<p>&nbsp;</p>
<p>案例一:</p>
<p>演示当"path"路径为无或空时,得到的结果是" . ",只有传入__dirname的时候,才能得到绝对路径</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.join());
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(__dirname));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path</span></pre>
</div>
<p>案例二:</p>
<p>演示字符以 ./ 开头或者 / 和没有字符,得到的结果是加不加都不影响路径的拼接,此时你应该发现跟path.resolve()的有所不同了,因为 join() 只会单纯的去拼接你写入的"path"路径,而不会像path.resolve()那样用cd去运作;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.join());
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:c\b\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:c\b\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:\c\b\a</span></pre>
</div>
<p>案例三:</p>
<p>演示以 ../ 开头的字符,此时你会发现join()不仅是单纯的去拼接路径,而且也是从右到左去拼接的,../之后还有"path"路径的话,也是会被覆盖掉;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
<span style="color: rgba(0, 0, 0, 1)">console.log(path.join());
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../c</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:..\
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:..\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:..\a\b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:b
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:c\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:..\c\b\a</span></pre>
</div>
<p>案例四:</p>
<p>演示path.join()搭配__dername变量,为什么一定要把它放在第一位?</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
console.log(path.join(__dirname,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,__dirname));

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:a\E:\Berlin-Case\path</span></pre>
</div>
<p>&nbsp;</p>
<p>看出区别了吗?对的,没错,join会不管对错,直接把你写入的路径都拼接到一块,这也是为什么要放在第一位的原因,当然resolve()就没这种问题,接下来继续演示,与字符的搭配;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入path模块</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处直接打印</span>
console.log(path.join(__dirname,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));
console.log(path.join(__dirname,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">../a</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">b</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">));

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\path\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\a
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:E:\Berlin-Case\a\b<br></span></pre>
</div>
<p>&nbsp;</p>
<p>以上示例可以看出,'/' './' 这两个字符在path.join()的方法中是不起作用的,不加也是一样的效果,只有 '../ ' 才有返回上级目录的作用,所以使用path.join()时,加个__dirname,拼上你要的"path"路径即可;(不加会很麻烦哦)</p>
<p>&nbsp;</p>
<p>总结:</p>
<p>在path.join()方法中,'/' 与 './' 一般情况下可以不用(特殊情况的拼接除外哈);<br>在path.join()方法中,最好与__dirname变量搭配使用;<br>path.join()方法也是从右到左依次被解析排列组成路径的;<br>path.resolve与path.join的区别<br>结合上面两个方法的演示后的总结,它们之间的区别如下:</p>
<p>path.resolve()自带to参数,也就是当前输出文件的路径,而path.join()没有;<br>path.resolve()遇到 ' / ' 则会跳转到根目录(E:\),path.resolve()的拼接是有<strong>盘符</strong>的;而path.join()则没效果;<br>path.resove()搭配__dirname变量使用时,就算__dirname在最右边,resolve()会把左边的"path"路径给覆盖掉,形成正确的路径,而path.join()正常拼接,无论对错;<br><br></p>
<p>&nbsp;</p>


<br><br></div>


</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>问题:</p>
<p>在win10 系统本地正常运行的 “相对” 路径 将图片随着代码上传到bamboo上运行找不到对应的地址(linux系统和windows系统的不同导致当前的运行找不到文件)</p>
<p>原先的代码</p>
<div class="cnblogs_code">
<pre>When(/^On web I update profile avatar and click (.*) button$/, <span style="color: rgba(0, 0, 255, 1)">async</span> (button) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> avatarPath = path.join(__dirname, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./../../../../testdata/img/avatar.jpg</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    </span><span style="color: rgba(0, 0, 255, 1)">await</span><span style="color: rgba(0, 0, 0, 1)"> MyAccountPage.uploadProfileAvatar(avatarPath, button)
})</span></pre>
</div>
<p>&nbsp;</p>
<p>提示的错误在bamboo上 找的相对路径是linux的路径 所以当前无法正确找到对应的数据,但是在windows本地能正常运行</p>
<p><img src="https://img2023.cnblogs.com/blog/971787/202311/971787-20231116104516691-1618062583.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<div><span style="color: rgba(68, 68, 68, 1); font-family: &quot;Courier New&quot;, sans-serif; font-size: 12px; white-space-collapse: preserve; background-color: rgba(245, 245, 245, 1)">&nbsp;</span></div>

</div>
<div id="MySignature" role="contentinfo">
    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/
如出现转载未声明 将追究法律责任~谢谢合作<br><br>
来源:https://www.cnblogs.com/chenxiaomeng/p/17835822.html
頁: [1]
查看完整版本: 【Node.js】Node.js中path.resolve与path.join的区别与作用详解