##目录操作
- 创建一个目录
```
fs.mkdir(path[,model],callback)
fs.mkdirSync(path[,model])
```
- 删除一个空目录
```
fs.rmdir(path,callback)
fs.rmdirSync(path)
```
- 读取一个目录
```
fs.readdir(path,callback(err,files))
fs.readdirSync(path) // => 返回files
```
##例子
**打印当前目录所有文件**
```
// 打印当前目录所有文件
const fs = require('fs');
const path = require('path');
require('./proto.js');
// 获取当前有没有传入目标路径
var target = path.join(__dirname, process.argv[2] || './');
fs.readdir(target, (err, files) => {
files.forEach(file=> {
console.time(file);
// console.log(path.join(target, file));
fs.stat(path.join(target, file), function(err, stats) {
// stats.mtime.
console.log(`${stats.mtime.format('yyyy/MM/dd HH:mm') }\t${stats.size}\t${file}`);
console.timeEnd(file);
});
});
});
```
proto.js
```
/*
* @Author: iceStone
* @Date: 2016-01-07 22:28:04
* @Last Modified by: iceStone
* @Last Modified time: 2016-01-07 22:28:12
*/
'use strict';
// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
Date.prototype.format = function(format) { //author: meizz
let o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"f+": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (let k in o)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return format;
};
```
创建目录
```
// 创建文件夹
//创建目录的上级目录必须存在,否则创建失败
const fs = require('fs');
const path = require('path');
//成功
fs.mkdir(path.join(__dirname, 'demo1'));
//报错,上级目录demo2不存在
fs.mkdir(path.join(__dirname, 'demo2/demo3'), (err) => {
console.log(err);
});
```
**创建层级目录**
以模块的方式
步骤:
创建模块文件,定义模块成员,导出模块成员,载入模块,使用模块
module/mkdirs.js
```
// 创建层级目录
const fs = require('fs');
const path = require('path');
function mkdirs(pathname, callback) {
// module.parent 拿到的是调用我的对象 index.js
// console.log(module.parent);
var root = path.dirname(module.parent.filename);
pathname = path.isAbsolute(pathname) ? pathname : path.join(root, pathname)
var relativepath = path.relative(root, pathname);
var folders = relativepath.split(path.sep);
try {
var pre = '';
folders.forEach(folder => {
try {
// 如果不存在则读取不到文件内容则报错
fs.statSync(path.join(root, pre, folder));
} catch (error) {
fs.mkdirSync(path.join(root, pre, folder));
}
pre = path.join(pre, folder);
});
callback && callback(null);
} catch (error) {
callback && callback(error);
}
}
module.exports = mkdirs;
```
index.js
```
var mkdirs = require('./module/mkdirs');
var path = require('path');
mkdirs(path.join(__dirname, 'f1/f2/f3'), (err) => { console.log(err); });
```
注意__dirname,是运用文件所在的目录。
- 简介
- 配置安装
- window
- 基础知识
- Node 命令基本用法
- 进程和线程
- 调试
- 异步、回调
- 全局对象
- 非阻塞 I/O和事件驱动和非阻塞机制
- npm包概念
- 模块化
- 实现require和cache
- 核心模块操作
- fs文件系统操作
- 同步调用和异步调用
- 缓冲区处理(二进制数据)
- 文件读取
- 文件写入
- 例子:读取歌词文件显示
- 文件流
- 例子:文件复制
- 监视文件
- 其他文件操作
- 目录操作
- 例子:递归加载目录树
- path路径操作模块
- 网络操作
- URL 解析模块
- querystring查询字符串模块
- crypto加密解密模块
- Socket
- 例子:聊天室
- coffeescript
- Gulp-自动化构建工具
- Gulp实现前端构建
- Gulp后端构建
- 插件
- gulp-load-plugins 模块化管理插件
- gulp-minify-css 压缩css插件
- gulp-sass 将sass预处理为css
- gulp-less 将less预处理为css
- gulp-sourcemaps 插件
- gulp-concat 合并插件
- gulp-uglify 压缩JS插件
- gulp-util gulp常用工具库插件
- yargs插件
- gulp-nodemon 自动启动/重启插件
- coffee-script 插件
- gulp-coffee插件
- gulp-livereload 网页自动刷新
- Moment.js-处理时间插件
- express 前端框架
- Async-异步流程控制插件
- node-progress进度条插件
- JSHint-代码规范检查工具
- lodash -JavaScript 工具库
- 资料
- 框架所用包
- bodyParser