<h1 align="center">😎 文件夹解析器[Dir Parser v2] 😎</h1>
<p align="center">
  <img width="80%;" src="images/demo.png">
</p>

# 文件夹解析器 dir-parser

[![npm](https://img.shields.io/npm/v/dir-parser.svg)](https://www.npmjs.com/package/dir-parser)
[![LICENSE MIT](https://img.shields.io/npm/l/dir-parser.svg)](https://www.npmjs.com/package/dir-parser) 
[![NPM Downloads](https://img.shields.io/npm/dm/dir-parser.svg?style=flat)](https://npmcharts.com/compare/dir-parser?minimal=true)
[![Install Size](https://packagephobia.now.sh/badge?p=dir-parser)](https://packagephobia.now.sh/result?p=dir-parser)

> 解析一个文件夹并生成它的结构树

使用其它语言阅读: [English](https://github.com/CN-Tower/dir-parser) | 简体中文

- [文件夹解析器 dir-parser](#文件夹解析器-dir-parser)
  - [一、什么是文件夹解析器 dir-parser](#一什么是文件夹解析器-dir-parser)
    - [1.1 工具简介](#11-工具简介)
    - [1.2 安装使用](#12-安装使用)
  - [二、在命令行中使用](#二在命令行中使用)
    - [2.1 打印帮助信息](#21-打印帮助信息)
    - [2.2 生成文件树](#22-生成文件树)
    - [2.3 使用解析参数](#23-使用解析参数)
      - [2.3.1 排除项-excludes](#231-排除项-excludes)
      - [2.3.2 忽略项-ignores](#232-忽略项-ignores)
      - [2.3.3 Glob过滤-glob](#233-Glob过滤-glob)
      - [2.3.4 正则匹配-patterns](#234-正则匹配-patterns)
      - [2.3.5 结构线型-lineType](#235-结构线型-lineType)
      - [2.3.6 解析深度-depth](#236-解析深度-depth)
      - [2.3.7 节点逆序-reverse](#237-节点逆序-reverse)
      - [2.3.8 文件优先-fileFirst](#238-文件优先-fileFirst)
      - [2.3.9 仅文件-fileOnly](#239-仅文件-fileOnly)
      - [2.3.10 仅文件夹-dirOnly](#2310-仅文件夹-dirOnly)
      - [2.3.11 解析信息-dirInfo](#2311-解析信息-dirInfo)
      - [2.3.12 路径排除-excPaths](#2312-路径排除-excPaths)
      - [2.3.13 正则排除-excPatterns](#2313-正则排除-excPatterns)
      - [2.3.14 静默解析-silent](#2314-静默解析-silent)
      - [2.3.15 生成结果-generate](#2315-生成结果-generate)
      - [2.3.16 配置文件-config](#2316-配置文件-config)
    - [2.4 多个命令混合使用](#24-多个命令混合使用)
  - [三、在Js代码中使用](#三在Js代码中使用)
    - [3.1 方法接口](#31-方法接口)
      - [3.1.1 主函数-parser](#311-主函数-parser)
      - [3.1.2 参数选项-Options](#312-参数选项-options)
      - [3.1.3 解析结果-Parsed](#313-解析结果-parsed)
      - [3.1.4 文件夹信息-DirInfo](#314-文件夹信息-dirinfo)
      - [3.1.5 文件信息-FileInfo](#315-文件信息-fileinfo)
    - [3.2 获取文件树](#32-获取文件树)
      - [3.2.1 构建文件树案例](#321-构建文件树案例)
      - [3.2.2 执行文件树案例](#322-执行文件树案例)
    - [3.3 获取文件信息](#33-获取文件信息)
      - [3.3.1 构建文件夹信息案例](#331-构建文件夹信息案例)
      - [3.3.2 执行文件夹信息案例](#332-执行文件夹信息案例)
      - [3.3.3 构建子文件信息案例](#333-构建子文件信息案例)
      - [3.3.4 执行子文件信息案例](#334-执行子文件信息案例)
      - [3.3.5 构建纯文件信息案例](#335-构建纯文件信息案例)
      - [3.3.6 执行纯文件信息案例](#336-执行纯文件信息案例)

## 一、什么是文件夹解析器 dir-parser

### 1.1 工具简介
👍👍👍dir-parser是一个基于nodejs的强大的文件夹分析工具，可以在命令行中使用也可以在javascript代码中应用。有很多实用的参数可以设置，可以帮助你获取格式化的文件夹树和内部信息。

### 1.2 安装使用

#### 1.2.1 全局安装
- yarn: `$ yarn global add dir-parser`
- npm: `$ npm install -g dir-parser`

#### 1.2.2 局部安装
- yarn: `$ yarn add dir-parser` or `$ yarn add dir-parser -D`
- npm: `$ npm install dir-parser` or `$ npm install dir-parser -D`

## 二、在命令行中使用

### 2.1 打印帮助信息
`$ dp -H` (或: `$ dp --Help`)
```
用例: dp [参数options]

参数 Options:
  -V, --version                   打印输出版本号。
  -v, --version                   打印输出版本号。
  -c, --config [config]           根据配置文件解析，可选。
  -i, --input <input>             指定个目标文件夹，(默认: "./")。
  -o, --output <output>           解析结果输出目录，(默认: "./")。
  -d, --depth <depth>             解析深度，0表示不限制。(默认: 0)。
  -l, --lineType <lineType>       文件树线型, s(solid)、d(dash)、ss(short-solid)、sd(short-dash)，(默认: "s")。
  -e, --excludes <excludes..>     根据名称排除文件夹或文件。
  -x, --excPaths <excPaths..>     根据路径排除文件夹或文件。
  -p, --patterns <patterns...>    根据正则解析文件夹或文件。
  -g, --generate [fileName]       生成一个解析结果的文件，默认文件名为"dir-info.txt"。
  -r, --reverse                   生成节点逆序的文件树。
  -s, --silent                    静默解析，不在控制台输出解析结果。
  -f, --fileFirst                 先输出文件节点，先于文件夹节点。
  -F, --fileOnly                  只解析文件。
  -D, --dirOnly                   只解析文件夹，只有当fileOnly为false时才生效。
  -I, --ignores <ignores..>       根据名称忽略一些文件夹或文件。
  -N, --no-dirInfo                不在解析结果中显示文件夹和文件的数量信息。
  -G, --glob <glob>               使用glob语法过虑文件.
  --paths <paths..>               根据路径解析文件夹或文件。
  --includes <includes..>         根据名称解析文件夹或文件。
  --excPatterns <excPatterns...>  根据正则排队文件夹或文件。
  -H, --Help                      打印中文帮助信息。
  -h, --help                      打印英语帮助信息。(output usage information)
```

### 2.2 生成文件树
如果需要跑例子的话，你可能需要安装 `express-generator`，但这也不是必需的:<br>
运行: <br>
`$ npm install -g express-generator`<br>
`$ express myapp`<br>
`$ cd myapp`<br>
`$ dp`<br>
```
myapp ( Directories: 7, Files: 9 )
├── bin
│   └── www
├── public
│   ├── images/
│   ├── javascripts/
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
└── package.json
```

### 2.3 使用解析参数

#### 2.3.1 排除项-excludes
👉 根据名称排除文件夹或文件。<br>
`$ # git init`<br>
`$ npm install`<br>
`$ parser -e .git,node_modules,public`<br>
或: `$ parser --excludes .git,node_modules,public`
```
myapp ( Directories: 3, Files: 9 )
├── bin
│   └── www
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── package-lock.json
└── package.json
```
文件或文件名称中包含空格：<br>
`$ touch 'white space.txt'`<br>
`$ dp -e '[".git", "node_modules", "public", "white space.txt"]'`
`$ rm -rf white\ space.txt`
```
myapp ( Directories: 3, Files: 9 )
├── bin
│   └── www
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.2 忽略项-ignores
👉 根据名称忽略一些文件夹或文件。<br>
`$ dp -e node_modules -I bin,public`<br>
或: `$ dp -e node_modules --ignores bin,public`
```
myapp ( Directories: 4, Files: 8 )
├── bin/
├── public/
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.3 Glob过滤-glob
👉 使用glob规则过滤，注意：glob规则必需要有引号！<br>
`$ dp -e node_modules -G '**/*.js'`<br>
或: `$ dp -e node_modules --glob '**/*.js'`
```
myapp ( Directories: 1, Files: 3 )
├── routes
│   ├── index.js
│   └── users.js
└── app.js
```

#### 2.3.4 正则匹配-patterns
👉 根据正则解析文件夹或文件。<br>
`$ dp -e node_modules -p .js$`<br>
或: `$ dp -e node_modules --patterns .js$`
```
myapp ( Directories: 1, Files: 3 )
├── routes
│   ├── index.js
│   └── users.js
└── app.js
```

#### 2.3.5 结构线型-lineType
👉 生成的文件树线型, s(solid)、d(dash)、ss(short-solid)、sd(short-dash)，[默认: "s"]。<br>
`$ dp -e bin,node_modules -l d`<br>
或: `$ dp -e bin,node_modules --lineType d`
```
myapp ( Directories: 6, Files: 9 )
+-- public
¦   +-- images/
¦   +-- javascripts/
¦   +-- stylesheets
¦       +-- style.css
+-- routes
¦   +-- index.js
¦   +-- users.js
+-- views
¦   +-- error.jade
¦   +-- index.jade
¦   +-- layout.jade
+-- app.js
+-- package-lock.json
+-- package.json
```

#### 2.3.6 解析深度-depth
👉 解析深度，0表示不限制。(默认: 0)<br>
`$ dp -e node_modules,views -d 2`<br>
或: `$ dp -e node_modules,views --depth 2`
```
myapp ( Directories: 6, Files: 6 )
├── bin
│   └── www
├── public
│   ├── images/
│   ├── javascripts/
│   └── stylesheets/*
├── routes
│   ├── index.js
│   └── users.js
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.7 节点逆序-reverse
👉 生成节点逆序的文件树。<br>
`$ dp -e node_modules,views -d 2 -r`<br>
或: `$ dp -e node_modules,views -d 2 --reverse`
```
myapp ( Directories: 6, Files: 6 )
├── routes
│   ├── users.js
│   └── index.js
├── public
│   ├── stylesheets/*
│   ├── javascripts/
│   └── images/
├── bin
│   └── www
├── package.json
├── package-lock.json
└── app.js
```

#### 2.3.8 文件优先-fileFirst
👉 先输出文件节点，先于文件夹节点。<br>
`$ dp -e node_modules,bin,views -f`<br>
或: `$ dp -e node_modules,bin,views --fileFirst`
```
myapp ( Directories: 5, Files: 6 )
├── app.js
├── package-lock.json
├── package.json
├── public
│   ├── images/
│   ├── javascripts/
│   └── stylesheets
│       └── style.css
└── routes
    ├── index.js
    └── users.js
```

#### 2.3.9 仅文件-fileOnly
👉 只解析文件。<br>
`$ dp -e node_modules,bin,views -F`<br>
或: `$ dp -e node_modules,bin,views --fileOnly`
```
myapp ( Directories: 3, Files: 6 )
├── public
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.10 仅文件夹-dirOnly
👉 只解析文件夹，只有当fileOnly为false时才生效。<br>
`$ dp -e node_modules,bin,views -D`<br>
或: `$ dp -e node_modules,bin,views --dirOnly`
```
myapp ( Directories: 5 )
├── public
│   ├── images/
│   ├── javascripts/
│   └── stylesheets/
└── routes/
```

#### 2.3.11 解析信息-dirInfo
👉 不在解析结果中显示文件夹和文件的数量信息。<br>
`$ dp -e node_modules,bin,public -N`<br>
或: `$ dp -e node_modules,bin,public --no-dirInfo`
```
myapp
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.12 路径排除-excPaths
👉 根据路径排除文件夹或文件。<br>
`$ dp -e node_modules,bin -x myapp/public`<br>
或: `$ dp -e node_modules,bin -excPath myapp/public`
```
myapp ( Directories: 2, Files: 8 )
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.13 正则排除-excPatterns
👉 根据正则排队文件夹或文件。<br>
`$ dp -e node_modules,bin --excPatterns .jade$,.css$`
```
myapp ( Directories: 6, Files: 5 )
├── public
│   ├── images/
│   ├── javascripts/
│   └── stylesheets/
├── routes
│   ├── index.js
│   └── users.js
├── views/
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.14 静默解析-silent
👉 静默解析，不在控制台输出解析结果。<br>
`$ dp -e node_modules,bin,public -s`<br>
或: `$ dp -e node_modules,bin,public --silent`

#### 2.3.15 生成结果-generate
👉 生成一个解析结果的文件，默认文件名为"dir-info.txt"。<br>
`$ dp -e node_modules,bin,public -sg`<br>
或: `$ dp -e node_modules,bin,public -s --generate`<br>
`$ cat dir-info.txt`
```
myapp ( Directories: 2, Files: 8 )
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── package-lock.json
└── package.json
```

#### 2.3.16 配置文件-config
👉 根据配置文件解析，可选。<br>
`$ touch dp.conf.json`<br>
`$ vi dp.conf.json`
```json
{
  "directory": "./",
  "excludes": [ ".git", "node_modules", "bin", "public", "dp.conf.json" ],
  "depth": "2",
  "generate": "info.txt"
}
```
`$ dp -c ./dp.conf.json`
```
myapp ( Directories: 2, Files: 9 )
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── dir-info.txt
├── package-lock.json
└── package.json
```

### 2.4 多个命令混合使用
`dp -e node_modules,bin -I views -d 2 -Nr`
```
myapp
├── views/
├── routes
│   ├── users.js
│   └── index.js
├── public
│   ├── stylesheets/*
│   ├── javascripts/
│   └── images/
├── dp.conf.json
├── package.json
├── package-lock.json
├── info.txt
├── dir-info.txt
└── app.js
```

## 三、在Js代码中使用

### 3.1 方法接口

#### 3.1.1 主函数-dirParser
```ts
dirParser(dirPath: string, options: Options): Promise<Parsed>
```

#### 3.1.2 参数选项-Options
```ts
interface Options {             
  depth?: number;
  reverse?: boolean;
  fileFirst?: boolean;
  fileOnly?: boolean;
  dirOnly?: boolean;
  getFiles?: boolean;
  getChildren?: boolean;
  dirTree?: boolean;             // default: true
  dirInfo?: boolean;             // default: true
  lineType?: 'solid' | 'dash'; // default: 'solid'
  excludes?: Array<string>;      // eg: [ '.git', 'node_modules', '.idea' ];
  excPaths?: Array<string>;      // eg: [ 'src/app' ];
  excPatterns?: Array<string>;   // eg: [ 'src/*.js ]';
  ignores: Array<string>;        // eg: [ 'public' ];
  includes: Array<string>;       // eg: [ 'app.js' ];
  paths?: Array<string>;         // eg: [ 'src/public' ];
  patterns?: Array<string>;      // eg: [ '*.js ]';
}
```
#### 3.1.3 解析结果-Parsed
```ts
interface Parsed extends DirInfo {
  dirTree: string;
  children: Array<DirInfo | FileInfo>
  files: Array<FileInfo>
}
```

#### 3.1.4 文件夹信息-DirInfo
```ts
interface DirInfo {
  name: string;
  type: 'directory';
  size: number;
  size_kb: number;
  path: string;
  absPath: string;
  dir: string;
  absDir: string;
  dirNum: number;
  fileNum: number;
  children: Array<DirInfo | FileInfo>
}
```

#### 3.1.5 文件信息-FileInfo
```ts
interface FileInfo {
  name: string;
  base: string;
  ext: string;
  type: 'file';
  size: number;
  size_kb: number;
  path: string;
  absPath: string;
  dir: string;
  absDir: string;
}
```

### 3.2 获取文件树

#### 3.2.1 构建文件树案例
`$ npm install funclib`<br>
`$ touch test.js`<br>
`$ vi test.js`<br>
```js
const fn = require('funclib');
const dirParser = require('dir-parser');

dirParser('./', {
  excludes: ['.git', 'node_modules'],
  // lineType: 'dash',
  // fileFirst: true,
}).then(parsed => {
  fn.log(parsed.dirTree, '# parsed.dirTree');

  // fn.log(fn.pick(parsed, prop => prop !== 'dirTree'), '# parsed result info');
  // fn.log(parsed.children, '# parsed.children');
  // fn.log(parsed.files, '# parsed.files');
});
```

#### 3.2.2 执行文件树案例
`$ node test.js`
```
==================================================================
                  [09:48:55] # parsed.dirTree
------------------------------------------------------------------
myapp
├── bin
│   └── www
├── public
│   ├── images/
│   ├── javascripts/
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js
├── dir-info.txt
├── info.txt
├── package-lock.json
├── package.json
├── dp.conf.json
└── test.js
==================================================================
```

### 3.3 获取文件信息

#### 3.3.1 构建文件夹信息案例
`$ vi test.js`
```js
dirParser('./', {
  excludes: ['.git', 'node_modules'],
  // lineType: 'dash',
  // fileFirst: true,
}).then(parsed => {
  console.log(fn.pretty(fn.pick(parsed, prop => prop !== 'dirTree')));
  
  // fn.log(parsed.dirTree, '# parsed.dirTree');
  // fn.log(parsed.children, '# parsed.children');
  // fn.log(parsed.files, '# parsed.files');
});
```
#### 3.3.2 执行文件夹信息案例
`$ node test.js`
```json
{
  "name": "myapp",
  "type": "directory",
  "path": "./",
  "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp",
  "dir": ".",
  "absDir": "/Users/cntower/code/@cntower/dir-parser",
  "dirNum": 7,
  "fileNum": 14
}
```

#### 3.3.3 构建子文件信息案例
`$ vi test.js`
```js
dirParser('./', {
  excludes: ['.git', 'node_modules', 'public'],
  getFiles: true,    // 默认为false，返回结果是否包含一个包含所有子文件信息的数组。
  getChildren: true, // 默认为false，返回结果是否包含一个所有子文件夹和子文件信息的数组。
  dirTree: false     // 默认为true，返回结果是否包含生成的文件树信息
}).then(parsed => {
  console.log(fn.pretty(parsed.children));
  // fn.log(parsed.files, '# parsed.files');
});
```

#### 3.3.4 执行子文件信息案例
`$ node test.js`
```json
、
  {
    "name": "bin",
    "type": "directory",
    "size": 1591,
    "size_kb": "1.55kb",
    "path": "bin",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/bin",
    "dir": ".",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp",
    "dirNum": 0,
    "fileNum": 1,
    "children": [
      {
        "name": "www",
        "base": "www",
        "ext": "",
        "type": "file",
        "size": 1591,
        "size_kb": "1.55kb",
        "path": "bin/www",
        "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/bin/www",
        "dir": "bin",
        "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/bin"
      }
    ]
  },
  {
    "name": "routes",
    "type": "directory",
    "size": 408,
    "size_kb": "0.4kb",
    "path": "routes",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/routes",
    "dir": ".",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp",
    "dirNum": 0,
    "fileNum": 2,
    "children": [
      {
        "name": "index.js",
        "base": "index",
        "ext": ".js",
        "type": "file",
        "size": 205,
        "size_kb": "0.2kb",
        "path": "routes/index.js",
        "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/routes/index.js",
        "dir": "routes",
        "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/routes"
      },
      {
        "name": "users.js",
        "base": "users",
        "ext": ".js",
        "type": "file",
        "size": 203,
        "size_kb": "0.2kb",
        "path": "routes/users.js",
        "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/routes/users.js",
        "dir": "routes",
        "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/routes"
      }
    ]
  },
  {
    "name": "app.js",
    "base": "app",
    "ext": ".js",
    "type": "file",
    "size": 1075,
    "size_kb": "1.05kb",
    "path": "app.js",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/app.js",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "dir-info.txt",
    "base": "dir-info",
    "ext": ".txt",
    "type": "file",
    "size": 277,
    "size_kb": "0.27kb",
    "path": "dir-info.txt",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/dir-info.txt",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "info.txt",
    "base": "info",
    "ext": ".txt",
    "type": "file",
    "size": 301,
    "size_kb": "0.29kb",
    "path": "info.txt",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/info.txt",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "package-lock.json",
    "base": "package-lock",
    "ext": ".json",
    "type": "file",
    "size": 68550,
    "size_kb": "66.94kb",
    "path": "package-lock.json",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/package-lock.json",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "package.json",
    "base": "package",
    "ext": ".json",
    "type": "file",
    "size": 347,
    "size_kb": "0.34kb",
    "path": "package.json",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/package.json",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "dp.conf.json",
    "base": "dp.conf",
    "ext": ".json",
    "type": "file",
    "size": 145,
    "size_kb": "0.14kb",
    "path": "dp.conf.json",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/dp.conf.json",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "test.js",
    "base": "test",
    "ext": ".js",
    "type": "file",
    "size": 554,
    "size_kb": "0.54kb",
    "path": "test.js",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/test.js",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  }
]
```

#### 3.3.5 构建纯文件信息案例
`$ vi test.js`
```js
dirParser('./', {
  excludes: ['.git', 'node_modules', 'public'],
  getFiles: true,
  getChildren: true,
  dirTree: false
}).then(parsed => {
  // fn.log(parsed.children, '# parsed.children');
  console.log(fn.pretty(parsed.files));
});
```

#### 3.3.6 执行纯文件信息案例
`$ node test.js`
```json
[
  {
    "name": "www",
    "base": "www",
    "ext": "",
    "type": "file",
    "size": 1591,
    "size_kb": "1.55kb",
    "path": "bin/www",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/bin/www",
    "dir": "bin",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/bin"
  },
  {
    "name": "index.js",
    "base": "index",
    "ext": ".js",
    "type": "file",
    "size": 205,
    "size_kb": "0.2kb",
    "path": "routes/index.js",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/routes/index.js",
    "dir": "routes",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/routes"
  },
  {
    "name": "users.js",
    "base": "users",
    "ext": ".js",
    "type": "file",
    "size": 203,
    "size_kb": "0.2kb",
    "path": "routes/users.js",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/routes/users.js",
    "dir": "routes",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/routes"
  },
  {
    "name": "error.jade",
    "base": "error",
    "ext": ".jade",
    "type": "file",
    "size": 84,
    "size_kb": "0.08kb",
    "path": "views/error.jade",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/views/error.jade",
    "dir": "views",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/views"
  },
  {
    "name": "index.jade",
    "base": "index",
    "ext": ".jade",
    "type": "file",
    "size": 66,
    "size_kb": "0.06kb",
    "path": "views/index.jade",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/views/index.jade",
    "dir": "views",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/views"
  },
  {
    "name": "layout.jade",
    "base": "layout",
    "ext": ".jade",
    "type": "file",
    "size": 125,
    "size_kb": "0.12kb",
    "path": "views/layout.jade",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/views/layout.jade",
    "dir": "views",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp/views"
  },
  {
    "name": "app.js",
    "base": "app",
    "ext": ".js",
    "type": "file",
    "size": 1075,
    "size_kb": "1.05kb",
    "path": "app.js",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/app.js",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "dir-info.txt",
    "base": "dir-info",
    "ext": ".txt",
    "type": "file",
    "size": 277,
    "size_kb": "0.27kb",
    "path": "dir-info.txt",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/dir-info.txt",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "info.txt",
    "base": "info",
    "ext": ".txt",
    "type": "file",
    "size": 301,
    "size_kb": "0.29kb",
    "path": "info.txt",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/info.txt",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "package-lock.json",
    "base": "package-lock",
    "ext": ".json",
    "type": "file",
    "size": 68550,
    "size_kb": "66.94kb",
    "path": "package-lock.json",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/package-lock.json",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "package.json",
    "base": "package",
    "ext": ".json",
    "type": "file",
    "size": 347,
    "size_kb": "0.34kb",
    "path": "package.json",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/package.json",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "dp.conf.json",
    "base": "dp.conf",
    "ext": ".json",
    "type": "file",
    "size": 145,
    "size_kb": "0.14kb",
    "path": "dp.conf.json",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/dp.conf.json",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  },
  {
    "name": "test.js",
    "base": "test",
    "ext": ".js",
    "type": "file",
    "size": 303,
    "size_kb": "0.3kb",
    "path": "test.js",
    "absPath": "/Users/cntower/code/@cntower/dir-parser/myapp/test.js",
    "dir": "",
    "absDir": "/Users/cntower/code/@cntower/dir-parser/myapp"
  }
]
```
