文件系统

Node.js 文件系统

$ npm install --save walk-sync
const walkSync = require('walk-sync');
const paths = walkSync('project');
// 输出结果
// ['one.txt', 'subdir/', 'subdir/two.txt']

文件寻址

Node 中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三个都是绝对路径,为了便于比较,./../ 我们通过 path.resolve('./') 来转换为绝对路径。

  • __dirname: 总是返回被执行的 js 所在文件夹的绝对路径

  • __filename: 总是返回被执行的 js 的绝对路径

  • process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径

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

/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model/task.js
/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model

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

/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model/task.js
/Users/guo/Sites/learn/app
/Users/guo/Sites/learn/app

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

// 当前目录下
path.dirname(__filename) + '/test.js';
// 相邻目录下
path.resolve(__dirname, '../lib/common.js');
fs.readFile(path.resolve(__dirname, 'settings.json'), 'UTF-8', callback);

path.sep 表示了平台相关的路径分隔符,即 '\\' 或者 '/';在类 Unix 系统中,我们可以进行如下测试: 'foo/bar/baz'.split(path.sep)// returns ['foo', 'bar', 'baz']而在 Windows 系统中,则是用的双斜杠分隔:```'foo\bar\baz'.split(path.sep)// returns ['foo', 'bar', 'baz']