Node.js中的路径

来源:互联网 发布:怎么做钓鱼软件 编辑:程序博客网 时间:2024/04/30 11:56

目录

  • 目录
  • 简介
  • 例子
    • 目录结构
    • 主要代码
    • 执行结果
  • 具体说明
    • processcwd
    • processexecPath
    • __filename
    • __dirname
    • fsreadFilepath
    • requirepath

简介

在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/jstestprocess.execPath:/usr/local/bin/node__fileName:/Users/jiangqifan/jstest/main/pathTest.js__dirname:/Users/jiangqifan/jstest/maindata.name:jqffile:<Buffer 68 65 6c 6c 6f 57 6f 72 6c 64 2e>process.chdir('main')process.cwd():/Users/jiangqifan/jstest/mainprocess.execPath:/usr/local/bin/node__fileName:/Users/jiangqifan/jstest/main/pathTest.js__dirname:/Users/jiangqifan/jstest/maindata.name:jqffile:cannot read file: ./main/fileprocess.chdir('..')process.cwd():/Users/jiangqifan/jstestprocess.execPath:/usr/local/bin/node__fileName:/Users/jiangqifan/jstest/main/pathTest.js__dirname:/Users/jiangqifan/jstest/maindata.name:jqffile:<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
原创粉丝点击