Node.js中路径模块的join方法以及__dirname和./的区别

Node.js中路径模块的join方法以及__dirname和./的区别

一、join方法

path.join() 方法使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

零长度的 path 片段被忽略。 如果连接的路径字符串是零长度字符串,则将返回 ‘.’,表示当前工作目录

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'

path.join('foo', {
    
    }, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'

如果任何路径片段不是字符串,则抛出 TypeError

二、__dirname 和 ./ 的区别

__dirname总是指向被执行 js 文件的绝对路径

看个例子

当在/react-admin-server/routers/file-upload.js 文件中写了 __dirname, 它的值就是/react-admin-server/routers

相反./会返回你执行 node 命令的路径,例如你的工作路径

有一个特殊情况是在require()中使用./时,这时的路径就会是含有 require()的脚本文件的相对路径

看一个例子
假设有如下目录结构

/react-admin-server
  /routers
    file-upload.js 

然后在file-upload.js 中,有如下代码,然后在终端执行了下面命令

cd /react-admin-server/routers
node file-upload.js 
var path = require("path");
console.log(path.resolve(".")); //  /react-admin-server/routers
console.log(path.resolve(__dirname)); //  /react-admin-server/routers

. 是你的当前工作目录,在这个例子中就是/react-admin-server/routers__dirnamefile-upload.js 的文件路径,在这个例子中就是 /react-admin-server/routers

然而,如果我们的工作目录是/react-admin-server

cd /react-admin-server
node routers/file-upload.js 

将会得到

/react-admin-server
/react-admin-server/routers

此时,.指向我们的工作目录,即/react-admin-server__dirname 还是指向 /react-admin-server/routers

三、综合应用

//__dirname表示当前文件所在的根路径,也就是/routers,然后..表示向上退一级,也就是到了项目根目录,然后public/upload表示到了这个目录
const dirPath = path.join(__dirname, '..', 'public/upload')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41880073/article/details/123096052