首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >作为一个前端工程师也要掌握的几种文件路径知识

作为一个前端工程师也要掌握的几种文件路径知识

作者头像
coder_koala
发布于 2019-07-30 10:59:26
发布于 2019-07-30 10:59:26
56900
代码可运行
举报
运行总次数:0
代码可运行

前言

之前在做webpack配置时候多次用到路径相关内容。最近在写项目的时候,有一个文件需要上传到阿里云oss的功能,同时本地服务器也需要保留一个文件备份。多次用到了文件路径相关内容以及Node核心APIpath模块,所以系统的学习了一下,整理了这篇文章。

node中的路径分类

node中的路径大致分5类,dirname,filename,process.cwd(),./,../,其中dirname,filename,process.cwd()绝对路径

通过代码对每个分类进行说明:

文件目录结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码pra
  - node核心API/
      - fs.js
      - path.js

path.js中的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve('./'));

在代码pra目录下运行命令 node node核心API/path.js,我们可以看到结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/koala/Desktop/程序员成长指北/代码pra/node核心API
/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js
/koala/Desktop/程序员成长指北/代码pra
/koala/Desktop/程序员成长指北/代码pra

然后我们有可以在node核心API目录下运行这个文件,node path.js,运行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/koala/Desktop/程序员成长指北/代码pra/node核心API
/koala/Desktop/程序员成长指北/代码pra/node核心API/path.js
/koala/Desktop/程序员成长指北/代码pra/node核心API
/koala/Desktop/程序员成长指北/代码pra/node核心API

对比输出结果,暂时得到的结论是

  • __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
  • __filename: 总是返回被执行的 js 的绝对路径
  • process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径
  • ./: 跟 process.cwd() 一样,返回 node 命令时所在的文件夹的绝对路径

为什么说上面是暂时得到的结论,因为是有错误的,再看一段代码:我们在path.js中加上这句代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.A = 1;

之前直接通过readFile读取文件路径报错,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fs.readFile('./path.js',function(err,data){
   
});

现在在刚才报错的fs.js里面加这两句代码看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const test = require('./path.js');
console.log(test)

代码pra/目录下运行node node核心API/fs.js,最后查看结果,说明是可以访问到的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ A: 1 }

那么关于 ./正确的结论是:

require()中使用是跟__dirname 的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟 process.cwd() 效果相同,是相对于启动脚本所在目录的路径。

路径知识总结:
  • __dirname:获得当前执行文件所在目录的完整目录名
  • __filename:获得当前执行文件的带有完整绝对路径的文件名
  • process.cwd():获得当前执行node命令时候的文件夹目录名
  • ./:不使用require时候,./process.cwd()一样,使用require时候,与__dirname一样

只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 当前目录下
 path.dirname(__filename) + '/path.js';
// 相邻目录下
 path.resolve(__dirname, '../regx/regx.js');

path

前面讲解了路径的相关比较,接下来单独聊聊path这个模块,这个模块在很多地方比较常用,所以,对于我们来说,掌握他,对我们以后的发展更有利,不用每次看webpack的配置文件还要去查询一下这个api是干什么用的,很影响我们的效率

这是api官网地址:https://nodejs.org/api/path.html

个人认为官网中的api没有必要都掌握,下面会对一些常用的api进行讲解,我经常用到的,或者作为一个前端开发工程师在webpack等工程配置的时候经常用到的。

path.normalize

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');

console.log(path.normalize('/koala/Desktop//程序员成长指北//代码pra/..'));
规范后的结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/koala/Desktop/程序员成长指北/代码pra
作用总结

规范化路径,把不规范的路径规范化。

path.join

举例说明:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');
console.log(path.join('src', 'task.js'));

const path = require('path');
console.log(path.join(''));
转化后的结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
src/task.js
.
作用总结

path.join([...paths])

  1. 传入的参数是字符串的路径片段,可以是一个,也可以是多个
  2. 返回的是一个拼接好的路径,但是根据平台的不同,他会对路径进行不同的规范化,举个例子,Unix系统是/Windows系统是\,那么你在两个系统下看到的返回结果就不一样。
  3. 如果返回的路径字符串长度为零,那么他会返回一个.,代表当前的文件夹。
  4. 如果传入的参数中有不是字符串的,那就直接会报错

path.parse

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');
console.log(path.parse('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
运行结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ root: '/',
  dir: '/koala/Desktop/程序员成长指北/代码pra',
  base: 'node核心API',
  ext: '',
  name: 'node核心API' 
}
作用总结

他返回的是一个对象,那么我们来把这么几个名词熟悉一下:

  1. root:代表根目录
  2. dir:代表文件所在的文件夹
  3. base:代表整一个文件
  4. name:代表文件名
  5. ext: 代表文件的后缀名

path.basename

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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结果,嘿嘿。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
node核心API
path
作用总结

basename接收两个参数,第一个是path,第二个是ext(可选参数),当输入第二个参数的时候,打印结果不出现后缀名

path.dirname

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');
console.log(path.dirname('/koala/Desktop/程序员成长指北/代码pra/node核心API'));
运行结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/koala/Desktop/程序员成长指北/代码pra
作用总结

返回文件的目录完整地址

path.extname

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');
path.extname('index.html');
path.extname('index.coffee.md');
path.extname('index.');
path.extname('index');
path.extname('.index');
运行结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.html
.md
.
''
''
作用总结

返回的是后缀名,但是最后两种情况返回'',大家注意一下。

path.resolve

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require('path');
console.log(path.resolve('/foo/bar', '/bar/faa', '..', 'a/../c'));
输出结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/bar/c
作用总结

path.resolve([...paths])

path.resolve就相当于是shell下面的cd操作,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,这个接口所返回的结果了。但是resolve操作和cd操作还是有区别的,resolve的路径可以没有,而且最后进入的可以是文件。具体cd步骤如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /foo/bar/    //这是第一步, 现在的位置是/foo/bar/
cd /bar/faa     //这是第二步,这里和第一步有区别,他是从/进入的,也就时候根目录,现在的位置是/bar/faa
cd ..       //第三步,从faa退出来,现在的位置是 /bar
cd a/../c   //第四步,进入a,然后在推出,在进入c,最后位置是/bar/c

path.relative

举例说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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', ''));
运行结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
../../impl/bbb
 ""
 ../../koala/Desktop/程序员成长指北/代码pra/node核心API
作用总结

path.relative(from, to)

描述:从from路径,到to路径的相对路径。

边界:

  • 如果from、to指向同个路径,那么,返回空字符串。
  • 如果from、to中任一者为空,那么,返回当前工作路径。

总结

本篇文章关于路径的知识就说到这里,基础很重要的,既能节约开发时间,又能减少报错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员成长指北 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
985 博士真的会舍弃华为年薪接近 100 万 offer,去选择年薪 20 万的公务员吗?
喜欢做学术并且博士期间学术做得比较有成就的同学会选择做学术,其他同学(也有学术巨牛逼的,比如手握十几篇顶会,一作大几篇的)基本上都会选择业界就职,包括华为,Google,MSRA 这种技术公司和量化(国内 top 量化九坤的创始人就是我们院前辈,所以我们去九坤的很多),还有前几年比较好的区块链币圈或者美元基金。当然今年就业形势很差,选择华为的会比较多
用户6983566
2023/01/14
3.7K0
985 博士真的会舍弃华为年薪接近 100 万 offer,去选择年薪 20 万的公务员吗?
某大厂码农被裁员,找不到工作,妻子随即提出离婚。。。
新粉请关注我的公众号 今天读公众号文章看到这个事,说是某大城市的某互联网大厂里的某码农,在大厂工作了8年之久。结果这一轮疫情影响下,公司决定裁员。这位工作8年之久的老将,没逃脱裁员,被HR叫到办公室里面去开会协商,然后领了包裹走人了。 裁员这事情发生以后,他告诉了自己的妻子和父亲,但是没敢告诉更多的人。毕竟人到中年,上有小下有老,还有房贷在,压力大。 然后他很努力找了几周工作,但是结果却不太好。几周下来,投简历投下去,水花都没飘起来,完全没人搭理。于是压力就更大了。 这个时候他妻子过来提出离婚。妻子说,因为
用户1564362
2022/06/13
8200
某大厂码农被裁员,找不到工作,妻子随即提出离婚。。。
中国IT行业盛行,互联网行业已饱和!程序员“过多”是主要原因?
简单算个账:近十多年来,中国的各种大学每年有30万计算机相关专业毕业生,加上其他行业的转入,编程岗位每年新增超过20万人,全国的规模大约300万。平均每人年15万成本,大约需要4500亿成本。市场有多
xcbeyond
2020/03/25
2.3K0
中国IT行业盛行,互联网行业已饱和!程序员“过多”是主要原因?
面试了一个 39 岁程序员后,我被骂了……
https://mp.weixin.qq.com/s/uzMVaCEp7YtDKjDM8m_kwg
Java技术栈
2020/10/09
7020
面试了一个 39 岁程序员后,我被骂了……
为什么中国会有这么多程序员
警告:这篇文章是黑程序员的,内容口味较重, 阅读时如感不适, 请停止。 现在的一二线城市的公交或地铁上, 一棒砸死十个人估计一半程序员, 为什么现在这种职业会这么火爆? 主要原因应该有两个,第一,从业门槛低;第二,相对其它职业,收入高, 因此,大批人往这个行业里跳 在一些传统的行业中,如护士、银行、会计、老师之类, 是必须得老老实实的学习考试,或者还需要特定环境的历练才可以上岗, 不然的话, 还真的干不了。 更别说是医生律师或者金融这些高端行业了, 不得念个博士硕士的, 而且还要是名校毕业才能吃的开。 当程
用户1608022
2018/04/11
7700
为什么中国会有这么多程序员
学 Java 还是 Go,这事儿很简单!
网上的讨论五花八门,有人说 Java 过时了,Go 才是未来;还有人因为自己或朋友学 Go 找到工作了就觉得 Go 真香,觉得学 Go 竞争更少、机会更多。
程序员鱼皮
2025/06/11
1340
学 Java 还是 Go,这事儿很简单!
计算机应届生月薪大多是多少?
月薪4k,6k,8k,10k的各占百分之多少呢,好对自己有个定位,现在听听那些亲身经历者说一说。
磐创AI
2020/03/05
6.1K0
互联网就业系列文(三)——教练,我想去最赚钱的行业
作为一名普通人,也曾有过理想,只是后来被现实打败。如今每日祈祷,愿能有一位富婆,看穿我的坚强。
HZFEStudio
2021/06/27
4050
互联网就业系列文(三)——教练,我想去最赚钱的行业
杭州程序员从互联网跳央企,晒一天工作和收入,网友:待一年就废
说到互联网,有些人兴奋有些人恐惧,这几年相信不少人都听说过,很多互联网行业的人都挣到了人生第1桶金,可是现在不少的互联网行业人纷纷都跳槽, 就比如接下一位男子,从互联网跳槽到了央企,而他分享的央企一天工作日常,更是让网友吐槽,到底怎么回事?请往下看。 原来是一位程序员,分享了自己从互联网跳槽到央企之后的工作流程,男子说自己是211本科外硕士,有3年工作经验,而从这个表格可以看出了, 他9:15到公司露面,就直接去公司食堂吃早餐,然后9:30~11:00一个半小时查看公司邮件,和处理各种邮件,而11:00
程序猿DD
2022/06/07
7550
杭州程序员从互联网跳央企,晒一天工作和收入,网友:待一年就废
大三了想走IT这条路,下一年是自学还是培训?
PS :从轻松的校园走到社会时,多少人面临这巨大的落差,社会需要的,完全不是学校教的,按部就班的学习已经造成了巨大的能力与认知差异,这种差异必须要有坚定的意志,多次的跌打滚爬才能弥补。
IT架构圈
2018/07/02
5470
大三了想走IT这条路,下一年是自学还是培训?
啥是全栈程序员?更厉害?更有钱途?
大家好,我是鱼皮,我相信学编程的朋友都经常听到 “全栈” 这样一个词,但是你了解什么是全栈么?
程序员鱼皮
2021/06/09
1.2K0
【知乎提问:“程序员应该走什么路线?”】-我的回答
二年啊,这就是刚入行的程度。就是努力干活,多学、多练、多程序,想任何其它的都是白费工夫,因为你没有积累。
web前端教室
2019/09/19
9600
【知乎提问:“程序员应该走什么路线?”】-我的回答
程序员30岁前月薪达不到30K,该何去何从
前端自08年左右兴盛已来,无数年轻人投入其中,但是这2年不知道身为前端的你,有没有感觉到求一份靠谱的前端的工作变的很难,同样企业求一名靠谱的前端也觉得很难,其实并不是因为求职者太过挑剔,也不是企业给不起工资,而是因为这两年大前端的发展无论从技术深度和广度都跟以前大不一样,前端不再是页面仔,而是指能够使用JavaScript和相关H5技术开发iOS、Android、AR、VR、IoT、PC、Server、WebApp、3D甚至AI的综合性技术人才。很多同学的计算机基础相对薄弱,导致了知识直接断层。才会出现咫尺天涯的这种怪象。
疯狂的技术宅
2019/03/27
6381
程序员30岁前月薪达不到30K,该何去何从
知乎精选 | 长远看算法岗真的比开发岗香吗?
链接:https://www.zhihu.com/question/409815271/answer/2851056492
Houye
2023/03/01
4.4K0
知乎精选 | 长远看算法岗真的比开发岗香吗?
降薪,延长工时,没年终奖,裁员的2018
我在公众号上提失业裁员大潮,提程序员应该注意点什么,已经很多次了。之前不可避免的有很多否定的意见出来。最近终于各种消息接踵而来。我的公众号在过去两个月里,对裁员失业的话题基本没涉及了。原因就是我觉得等事情真的接踵而来发生的时候,写这些就是蹭热点了。
用户1564362
2019/03/07
4980
大规模裁员后,计算机会成为下一个土木吗?
每天给你送来NLP技术干货! ---- 整理:DASOU 最近互联网裁员,有网友热议:2022年大规模裁员后,计算机专业会不会成为下一个土木? 有个匿名网友写了这样一个回答,我认为挺好的,想跟大家分享一下。 https://www.zhihu.com/question/521800974/answer/2443221482 我学了10年计算机现在还在找工作,我爸干了一辈子土木现在也在找工作。我觉得计算机不会成为下一个土木。至于是不是49年入国军,我觉得楼主的眼光可以看长远一点,就是你这辈子到底想从事什么职
zenRRan
2022/06/10
8700
大规模裁员后,计算机会成为下一个土木吗?
美国大厂码农薪资曝光:年薪18万美元,够养家,不够买海景房
---- 新智元报道   编辑:袁榭 【新智元导读】在脸书、亚马逊这些全世界头等数码大厂里干三四年码农,到底能不能像传说中一样买得起加州海景房? 全球数字经济中的头等大厂们—FAANG(脸书Facebook、亚马逊Amazon、苹果Apple、网飞Netflix、谷歌Google),在码农业界与小白公众中有着种种神奇的传说。 FAANG干三年,能在加州买房? 比如其中的产品经理个个魔武双修、身怀绝艺,觉得公司内部开发工具不行,就自己转码开始改造。 再比如即使初级入门码农(entry level),
新智元
2022/03/14
5040
如果我大一的时候能看到就好了。
这段时间刚好一些准大学生们也开始陆陆续续的收到录取通知书了,即将进入大学,步入新的人生阶段。
why技术
2023/08/23
3630
如果我大一的时候能看到就好了。
20届算法学长有话说
我们都是20届算法学长,秋招之路已经结束,收获与打击的同时,对于算法是否应该早些转开发的问题,我们发表不同观点。
用户9831583
2022/06/16
3300
一周播报 | 大公司反而给高薪?3年前端开口要37K,被拒后竟进了阿里?!
今年(2017年)面了个小朋友,有3年的前端经验,开口要月薪37K,当时吓得快从凳子上摔下来。
养码场
2018/08/13
6360
推荐阅读
相关推荐
985 博士真的会舍弃华为年薪接近 100 万 offer,去选择年薪 20 万的公务员吗?
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档