We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
之前在做webpack配置时候多次用到路径相关内容,最近在写项目的时候,有一个文件需要上传到阿里云oss的功能,同时本地服务器也需要保留一个文件备份。多次用到了文件路径相关内容以及Node核心API的path模块,所以系统的学习了一下,整理了这篇文章。
webpack
path
node中的路径大致分5类,dirname,filename,process.cwd(),./,../,其中dirname,filename,process.cwd()绝对路径
dirname
filename
process.cwd()
./
../
通过代码对每个分类进行说明:
文件目录结构如下:
代码pra/ - node核心API/ - fs.js - path.js
path.js中的代码
const path = require('path'); console.log(__dirname); console.log(__filename); console.log(process.cwd()); console.log(path.resolve('./'));
在代码pra目录下运行命令 node node核心API/path.js,我们可以看到结果如下:
node node核心API/path.js
/koala/Desktop/程序员成长指北/代码pra/node核心API /koala/Desktop/程序员成长指北/代码pra/node核心API/path.js /koala/Desktop/程序员成长指北/代码pra /koala/Desktop/程序员成长指北/代码pra
然后我们有可以在node核心API目录下运行这个文件,node path.js,运行结果如下:
node核心API目录下
node path.js
/koala/Desktop/程序员成长指北/代码pra/node核心API /koala/Desktop/程序员成长指北/代码pra/node核心API/path.js /koala/Desktop/程序员成长指北/代码pra/node核心API /koala/Desktop/程序员成长指北/代码pra/node核心API
对比输出结果,暂时得到的结论是
为什么说上面是暂时得到的结论,因为是有错误的,再看一段代码: 我们在path.js中加上这句代码
exports.A = 1;
之前直接通过readFile读取文件路径报错,
fs.readFile('./path.js',function(err,data){ });
现在在刚才报错的fs.js里面加这两句代码看看:
const test = require('./path.js'); console.log(test)
在代码pra/目录下运行node node核心API/fs.js,最后查看结果,说明是可以访问到的:
代码pra/
node node核心API/fs.js
{ A: 1 }
那么关于 ./ 正确的结论是:
在 require() 中使用是跟 __dirname 的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟 process.cwd() 效果相同,是相对于启动脚本所在目录的路径。
require()
__dirname
__filename
require
只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:
// 当前目录下 path.dirname(__filename) + '/path.js'; // 相邻目录下 path.resolve(__dirname, '../regx/regx.js');
前面讲解了路径的相关比较,接下来单独聊聊path这个模块,这个模块在很多地方比较常用,所以,对于我们来说,掌握他,对我们以后的发展更有利,不用每次看webpack的配置文件还要去查询一下这个api是干什么用的,很影响我们的效率
这是api官网地址:https://nodejs.org/api/path.html
个人认为官网中的api没有必要都掌握,下面会对一些常用的api进行讲解,我经常用到的,或者作为一个前端开发工程师在webpack等工程配置的时候经常用到的。
举例说明
const path = require('path'); console.log(path.normalize('/koala/Desktop//程序员成长指北//代码pra/..'));
规范后的结果
/koala/Desktop/程序员成长指北/代码pra
作用总结
规范化路径,把不规范的路径规范化。
const path = require('path'); console.log(path.join('src', 'task.js')); const path = require('path'); console.log(path.join(''));
转化后的结果
src/task.js .
path.join([...paths])
Unix
/
Windows
\
.
const path = require('path'); console.log(path.parse('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
运行结果
{ root: '/', dir: '/koala/Desktop/程序员成长指北/代码pra', base: 'node核心API', ext: '', name: 'node核心API' }
他返回的是一个对象,那么我们来把这么几个名词熟悉一下:
const path = require('path'); console.log(path.basename('/koala/Desktop/程序员成长指北/代码pra/node核心API')); console.log(path.basename('/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js', '.js'));
看了上面代码的例子,我想应该知道了basename结果,嘿嘿。
node核心API path
basename接收两个参数,第一个是path,第二个是ext(可选参数),当输入第二个参数的时候,打印结果不出现后缀名
ext
const path = require('path'); console.log(path.dirname('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
返回文件的目录完整地址
const path = require('path'); path.extname('index.html'); path.extname('index.coffee.md'); path.extname('index.'); path.extname('index'); path.extname('.index');
.html .md . '' ''
返回的是后缀名,但是最后两种情况返回'',大家注意一下。
const path = require('path'); console.log(path.resolve('/foo/bar', '/bar/faa', '..', 'a/../c'));
输出结果
/bar/c
path.resolve([...paths])
path.resolve就相当于是shell下面的cd操作,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,这个接口所返回的结果了。但是resolve操作和cd操作还是有区别的,resolve的路径可以没有,而且最后进入的可以是文件。具体cd步骤如下
cd
cd path
resolve
cd /foo/bar/ //这是第一步, 现在的位置是/foo/bar/ cd /bar/faa //这是第二步,这里和第一步有区别,他是从/进入的,也就时候根目录,现在的位置是/bar/faa cd .. //第三步,从faa退出来,现在的位置是 /bar cd a/../c //第四步,进入a,然后在推出,在进入c,最后位置是/bar/c
const path = require('path'); console.log(path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')); console.log(path.relative('/data/demo', '/data/demo')); console.log(path.relative('/data/demo', ''));
../../impl/bbb "" ../../koala/Desktop/程序员成长指北/代码pra/node核心API
path.relative(from, to)
描述:从from路径,到to路径的相对路径。
边界:
本篇文章关于路径的知识就说到这里,基础很重要的,既能节约开发时间,又能减少报错。
今天就分享这么多,如果对分享的内容感兴趣,可以关注公众号「程序员成长指北」,或者加入技术交流群,大家一起讨论。
进阶技术路线
加入我们一起学习吧!
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
之前在做
webpack
配置时候多次用到路径相关内容,最近在写项目的时候,有一个文件需要上传到阿里云oss的功能,同时本地服务器也需要保留一个文件备份。多次用到了文件路径相关内容以及Node核心API的path
模块,所以系统的学习了一下,整理了这篇文章。node中的路径分类
node中的路径大致分5类,
dirname
,filename
,process.cwd()
,./
,../
,其中dirname
,filename
,process.cwd()
绝对路径通过代码对每个分类进行说明:
文件目录结构如下:
path.js中的代码
在代码pra目录下运行命令
node node核心API/path.js
,我们可以看到结果如下:然后我们有可以在
node核心API目录下
运行这个文件,node path.js
,运行结果如下:对比输出结果,暂时得到的结论是
为什么说上面是暂时得到的结论,因为是有错误的,再看一段代码:
我们在path.js中加上这句代码
之前直接通过readFile读取文件路径报错,
现在在刚才报错的fs.js里面加这两句代码看看:
在
代码pra/
目录下运行node node核心API/fs.js
,最后查看结果,说明是可以访问到的:那么关于
./
正确的结论是:在
require()
中使用是跟__dirname
的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟process.cwd()
效果相同,是相对于启动脚本所在目录的路径。路径知识总结:
__dirname
: 获得当前执行文件所在目录的完整目录名__filename
: 获得当前执行文件的带有完整绝对路径的文件名process.cwd()
:获得当前执行node命令时候的文件夹目录名./
: 不使用require时候,./
与process.cwd()
一样,使用require
时候,与__dirname
一样只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:
path
前面讲解了路径的相关比较,接下来单独聊聊path这个模块,这个模块在很多地方比较常用,所以,对于我们来说,掌握他,对我们以后的发展更有利,不用每次看webpack的配置文件还要去查询一下这个api是干什么用的,很影响我们的效率
个人认为官网中的api没有必要都掌握,下面会对一些常用的api进行讲解,我经常用到的,或者作为一个前端开发工程师在webpack等工程配置的时候经常用到的。
path.normalize
举例说明
规范后的结果
作用总结
规范化路径,把不规范的路径规范化。
path.join
举例说明
转化后的结果
作用总结
Unix
系统是/
,Windows
系统是\
,那么你在两个系统下看到的返回结果就不一样。.
,代表当前的文件夹。path.parse
举例说明
运行结果
作用总结
他返回的是一个对象,那么我们来把这么几个名词熟悉一下:
path.basename
举例说明
运行结果
看了上面代码的例子,我想应该知道了basename结果,嘿嘿。
作用总结
basename接收两个参数,第一个是
path
,第二个是ext
(可选参数),当输入第二个参数的时候,打印结果不出现后缀名path.dirname
举例说明
运行结果
作用总结
返回文件的目录完整地址
path.extname
举例说明
运行结果
作用总结
返回的是后缀名,但是最后两种情况返回'',大家注意一下。
path.resolve
举例说明
输出结果
/bar/c
作用总结
path.resolve就相当于是shell下面的
cd
操作,从左到右运行一遍cd path
命令,最终获取的绝对路径/文件名,这个接口所返回的结果了。但是resolve
操作和cd
操作还是有区别的,resolve
的路径可以没有,而且最后进入的可以是文件。具体cd
步骤如下path.relative
举例说明
运行结果
作用总结
path.relative(from, to)
描述:从from路径,到to路径的相对路径。
边界:
总结
本篇文章关于路径的知识就说到这里,基础很重要的,既能节约开发时间,又能减少报错。
今天就分享这么多,如果对分享的内容感兴趣,可以关注公众号「程序员成长指北」,或者加入技术交流群,大家一起讨论。
进阶技术路线
加入我们一起学习吧!
The text was updated successfully, but these errors were encountered: