今天就跟大家聊聊有关NodeJs中有哪些文件路径,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
站在用户的角度思考问题,与客户深入沟通,找到临清网站设计与临清网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、雅安服务器托管、企业邮箱。业务覆盖临清地区。一、挖坑 & 掉坑:
缘起一段这样的代码:
fs.readFile('./docs/use.md', function (err, buffer) { if (err) { return console.log('error: ', err); } console.log('OK'); });
本地运行时一切 OK,线上部署时却死活找不到 ./docs/use.md 这个文件,后来才发现是因为线上启动应用时不是从当前目录启动了,不过为什么启动脚本的位置也会影响这个路径呢,且往下看。
二、填坑:
Node 中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三个都是绝对路径,为了便于比较,./ 和 ../ 我们通过 path.resolve(‘./')来转换为绝对路径。
先看一个简单的栗子:
假如我们有这样的文件结构:
app/ -lib/ -common.js -model -task.js -test.js
在 task.js 里编写如下的代码:
var path = require('path'); console.log(__dirname); console.log(__filename); console.log(process.cwd()); console.log(path.resolve('./'));
在 model 目录下运行 node task.js 得到的输出是:
/Users/guo/Sites/learn/app/model.js /Users/guo/Sites/learn/app/model.js/task.js /Users/guo/Sites/learn/app/model.js /Users/guo/Sites/learn/app/model.js
然后在 app 目录下运行 node model/task.js,得到的输出是:
/Users/guo/Sites/learn/app/model.js /Users/guo/Sites/learn/app/model.js/task.js /Users/guo/Sites/learn/app /Users/guo/Sites/learn/app
那么,不好意思不是问题来了~T_T,我们可以得出一些肤浅的结论了:
__dirname: 总是返回被执行的 js 所在文件夹的绝对路径
__filename: 总是返回被执行的 js 的绝对路径
process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径
./: 跟 process.cwd() 一样、一样、一样的吗?
我明明记得在 require(‘../lib/common') 里一直都是各种相对路径写,也没见报什么错啊,我们还在再来个栗子吧,还是上面的结构,'model/task.js' 里的代码改成:
var fs = require('fs'); var common = require('../lib/common'); fs.readFile('../lib/common.js', function (err, data) { if (err) return console.log(err); console.log(data); });
在 model 目录下运行 node task.js,一切 Ok,没有报错。然后在 app 目录下运行 node model/task.js,然后很果断滴报错了:
那么这下问题真的都是来了,按照上面的理论,在 app 下运行时,../lib/common.js 会被转成 /Users/guo/Sites/learn/lib/common.js,这个路径显然是不存在的,但是从运行结果可以看出 require(‘../lib/common') 是 OK 的,只是 readFile 时报错了。
那么关于 ./ 正确的结论是:
在 require() 中使用是跟 __dirname 的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟 process.cwd() 效果相同,是相对于启动脚本所在目录的路径。
三、总结:
只有在 require() 时才使用相对路径(./, ../) 的写法,其他地方一律使用绝对路径,如下:
// 当前目录下 path.dirname(__filename) + ‘/test.js'; // 相邻目录下 path.resolve(__dirname, ‘../lib/common.js');
看完上述内容,你们对NodeJs中有哪些文件路径有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联网站建设公司行业资讯频道,感谢大家的支持。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。