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 得到的输出是:

$ node task.js
C:UsersjiantingDesktopappmodel
C:UsersjiantingDesktopappmodeltask.js
C:UsersjiantingDesktopappmodel
C:UsersjiantingDesktopappmodel

然后在 app 目录下运行 node model/task.js,得到的输出是:

$ node model/task.js
C:UsersjiantingDesktopappmodel
C:UsersjiantingDesktopappmodeltask.js
C:UsersjiantingDesktopapp
C:UsersjiantingDesktopapp

另一种常用的resolve拼接地址的情况,在 test.js 里编写如下的代码:

var path = require('path');console.log(path.resolve(__dirname, 'lib/common.js'));
console.log(path.resolve(__dirname, '/lib/common.js'));
console.log(path.resolve(__dirname, './lib/common.js'));
console.log(path.resolve(__dirname, '../lib/common.js'));

在 model 目录下运行 node test.js 得到的输出是:

$ node test.js
C:UsersjiantingDesktopappmodellibcommon.js
C:libcommon.js
C:UsersjiantingDesktopappmodellibcommon.js
C:UsersjiantingDesktopapplibcommon.js

那么,我们可以得出一些肤浅的结论了:

  1、__dirname: 总是返回被执行的 js 所在文件夹的绝对路径2、__filename: 总是返回被执行的 js 的绝对路径3、process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径

关于 . / 和 . ./ 正确的结论是:

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

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

// 当前目录下
path.dirname(__filename) + '/test.js';// path.dirname:返回路径的所在的文件夹名称
// 相邻目录下
path.resolve(__dirname, '../lib/common.js');// path.resolve:相当于不断的调用系统的cd命令 

path.join()和path.resolve()区别:

1、path.join

path.join():方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。
例如:path.join('foo', 'baz', 'bar'); // 返回 'foo/baz/bar'
注:如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录。

2、path.resolve

path.resolve:方法会把一个路径或路径片段的序列解析为一个绝对路径
例如:
注: 当前工作目录为 /home/myself/node
1、path.resolve('/foo/bar', './baz');// 返回: '/foo/bar/baz'
2、path.resolve('/foo/bar', '/tmp/file/');// 返回: '/tmp/file'
3、path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');// 如果当前工作目录为 /home/myself/node,// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

  • 两者区别:

1、join是把各个path片段连接在一起, resolve把‘/’当成根目录
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'

2、join直接拼接字段,resolve解析路径并返回
path.join("a", "b1", "..", "b2")
console打印会得到"a/b2"
path.resolve("a", "b1", "..", "b2")
console打印得到"/home/myself/node/a/b2"

详细内容的链接:请打开

js已知文件路径得到file对象_NodeJs 的几种文件路径相关推荐

  1. js 已知角度和斜边,求直角边

    //已知角度和斜边,求直角边 function hypotenuse(long,angle){//获得弧度var radian = 2*Math.PI/360*angle;return {a:Math ...

  2. js已知斜率和一点求方程

    要求解一条直线的方程,我们需要知道直线的斜率和一点.对于JavaScript来说,我们可以使用以下公式来计算: y - y1 = m(x - x1) 其中,m是直线的斜率,(x1, y1)是直线上已知 ...

  3. nodejs 当前文件路径_NodeJs的几种文件路径

    上次写删除文件夹的时候用到了fs模块,也集中用到了很多种路径,当时就想写一下,在Node中使用各种路径的问题,于是就简单写了一下,可以从 这里 获取demo源代码. 刚写Node的时候经常会遇到这种情 ...

  4. 重复文件查找_Duplicate File Remover PRO for mac(Mac文件重复查找软件)

    Duplicate File Remover PRO for mac是一款mac上的mac文件重复查找软件,Duplicate File Remover PRO for mac能将您的文件根据种类分为 ...

  5. include virtual引入html文件,ASP文件引用include file和include virtual两种用法

    在 ASP 编程中,我们经常遇到需要重复使用的模块代码,通常我们将这些模块代码保存为一个单独的文件,需要使用此模块代码时,在程序中通过 #include 指令引用此文件,这样使得工作效率和程序可读性大 ...

  6. 【JS】前端base64转图片File对象

    码 base64ToFile.js /** * base64转图片File * @param {String} base64 图片base64 * @param {String} fileName 图 ...

  7. ftp服务器文件名存在,有什么办法根据已知文件名来检测FTP服务器上是否存在该文件? 急...

    蛊毒传说 我不敢说 _________________ using System;using System.Collections.Generic;using System.Linq;using Sy ...

  8. 高德地图JS - 已知经纬度来获取街道、城市、详细地址等信息

    1.时候偶现你得引入谷歌API|JS var geoCoder = new AMap.Geocoder({city: ""//城市,默认:"全国" }); va ...

  9. js已知正弦余弦正切值求角度弧度

    弧度 Math.asin(value) Math.acos(value) Math.atan(value) 角度 Math.asin(value) / Math.PI * 180 Math.acos( ...

最新文章

  1. 说说标准服务器架构(WWW+Image/CSS/JS+File+DB)
  2. 关于“System.Data.ProviderIncompatibleException”类型的异常
  3. 常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全
  4. 【转】每天一个linux命令(53):route命令
  5. Python 中的模块简介及应用
  6. Longest Increasing Subsequence(LIS入门dp)
  7. php入门篇-------PHPCMS 入口文件,自动加载系统函数和URL规则
  8. P2831 [NOIP2016 提高组] 愤怒的小鸟 状压dp
  9. akka应用_处理Akka应用程序中的每个事件
  10. 教师节|祝所有可爱的讲师节日快乐!
  11. Linear Programming and network flows P17 笔记
  12. NRF24L01无线通信模块
  13. Python爬取小说网站页面制作电子书
  14. 今天又是一个全新的开始...
  15. mp3中不可缺少的音乐
  16. JSTL 标签大全详解
  17. 除了谷歌,这些互联网公司的办公室设计也十分酷炫
  18. Google: Sophisticated APT Group Burned 11 Zero-Days in Mass Spying Operation
  19. 宝塔提示PHP7.3等版本无zip扩展解决
  20. 大多数企业数字化转型的真正目的其实只是为了能多裁点人

热门文章

  1. android checkBox背景样式及用颜色值实现button点击效果
  2. iOS-状态栏字体颜色【白色】【Xcode9.1】
  3. 20155230 2016-2017-2《Java程序设计》课程总结
  4. 《架构之美》阅读笔记06
  5. Transact-SQL命令语法-数据表
  6. 我看Slashdot
  7. 退出功能—session
  8. 测试驱动的面向对象软件开发(china-pub首发)
  9. 「Luogu P2201」数列编辑器 解题报告
  10. 《软件需求最佳实践》阅读笔记02