Node.js中的路径

目录

简介

在node.js中会在这么几种情况下跟路径打交道:

  • process.cwd()
  • process.execPath
  • __fileName
  • __dirname
  • fs.readFile(path)
  • require

下面我们就来一一说明

例子

目录结构

假设我们有这样一个目录结构:
目录结构

主要代码

pathTest.js的内容如下:

function show(){

    var fs = require("fs");
    var data = require("./data.json");
    console.log("process.cwd():");
    console.log(process.cwd());
    console.log("");

    console.log("process.execPath:");
    console.log(process.execPath);
    console.log("");

    console.log("__fileName:");
    console.log(__filename);
    console.log("");


    console.log("__dirname:");
    console.log(__dirname);
    console.log("");


    console.log("");
    console.log("data.name:");
    console.log(data.name);

    try{

        console.log("file:");
        var content = fs.readFileSync("./main/file");
        console.log(content);
    } catch(e){
        console.log("cannot read file: ./main/file");
    }



}

show();

console.log("");
console.log("process.chdir('main')");
console.log("");
process.chdir("main")

show();


console.log("");
console.log("process.chdir('..')");
console.log("");
process.chdir("..")

show();

其他的json文件或者file就随便写点内容好了。

执行结果

通过命令行进入到/Users/jiangqifan/jstest目录,执行main/pathTest.js, 就像这样:

jiangqifandeMBP:jstest jiangqifan$ node main/pathTest.js

输出为:

process.cwd():
/Users/jiangqifan/jstest

process.execPath:
/usr/local/bin/node

__fileName:
/Users/jiangqifan/jstest/main/pathTest.js

__dirname:
/Users/jiangqifan/jstest/main


data.name:
jqf
file:
<Buffer 68 65 6c 6c 6f 57 6f 72 6c 64 2e>

process.chdir('main')

process.cwd():
/Users/jiangqifan/jstest/main

process.execPath:
/usr/local/bin/node

__fileName:
/Users/jiangqifan/jstest/main/pathTest.js

__dirname:
/Users/jiangqifan/jstest/main


data.name:
jqf
file:
cannot read file: ./main/file

process.chdir('..')

process.cwd():
/Users/jiangqifan/jstest

process.execPath:
/usr/local/bin/node

__fileName:
/Users/jiangqifan/jstest/main/pathTest.js

__dirname:
/Users/jiangqifan/jstest/main


data.name:
jqf
file:
<Buffer 68 65 6c 6c 6f 57 6f 72 6c 64 2e>

具体说明

相信聪明如你,看了上面的栗子之后就已经清楚每一种用法的情况了,不过我们还是在下面整理一下。

process.cwd()

这个方法返回的是当前进程的的当前工作目录

比如你在/Users/jiangqifan/jstest目录执行的node命令,那么返回的就是/Users/jiangqifan/jstest

通过你可以使用process.chdir(dir)来调整process.cwd()的值。基本上就可以相当于cd命令来理解。

process.execPath

启动当前进程的地址,就是你的node的可执行程序的地址啦。比如/usr/local/bin/node

__filename

这是有node提供的global对象,表示当前文件的路径。就像上面的栗子中的/Users/jiangqifan/jstest/main/pathTest.js

__dirname

这也是node提供的global对象,表示当前文件的目录。就像上面栗子中的/Users/jiangqifan/jstest/main

__filename和__dirname跟你在什么目录执行node命令跟关系,只跟当前js文件的路径有关。

fs.readFile(path)

在使用fs.readFile或者fs.readFileSync来读去文件的时候,如果path是绝对路径,当然没什么好说的,如果是相对路径呢,就是相对于process.cwd()
所以在上面的栗子中,我们通过process.chdir改变了进程的当前工作目录之后,就会发现原来能找到的文件找不到了。
而且需要注意的是,由于process.cwd()跟你执行node命令的路径有关。所以可能本来跑得好好的程序,后来由于懒得cd到工程目录中去,直接在外面执行就发现程序出错了。

require(path)

require使用相对路径来加载模块时,这个路径是相对于__filename,跟着当前js文件走的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值