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

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:\Users\jianting\Desktop\app\model

C:\Users\jianting\Desktop\app\model\task.js

C:\Users\jianting\Desktop\app\model

C:\Users\jianting\Desktop\app\model

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

$ node model/task.js

C:\Users\jianting\Desktop\app\model

C:\Users\jianting\Desktop\app\model\task.js

C:\Users\jianting\Desktop\app

C:\Users\jianting\Desktop\app

另一种常用的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:\Users\jianting\Desktop\app\model\lib\common.js

C:\lib\common.js

C:\Users\jianting\Desktop\app\model\lib\common.js

C:\Users\jianting\Desktop\app\lib\common.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"

详细内容的链接:请打开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值