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
,__dirname
是 file-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')