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

10f038c9906fca2464875d2523688a66.png

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"

详细内容的链接:请打开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值