fs内置模块:实现I/O操作
- fs.mkdir / fs.mkdirSync:创建文件夹,有Sync的是同步创建,反之没有是异步,想要实现无阻塞的I/O操作,我们一般都是用异步操作完成要处理的事情
- fs.readdir / fs.readdirSync:读取文件目录中的内容
- fs.rmdir :删除文件夹
- fs.readFile:读取文件中的内容
- fs.writeFile:向文件中写入内容(覆盖写入:写入的新内容会替换原有的内容)
- fs.appendFile:追加写入新内容,原有的内容还在
- fs.copyFile:拷贝文件到新的位置
- fs.unlink:删除文件
需求:
封装fs模块的所有api返回一个promise对象使之能够实现链式操作,避免回调地狱。
目录./utils/fsPromise
let fs=require('fs');
let path=require('path');
let dirname = path.resolve();//存储的是当前模块执行所在的绝对路径
//单独封装示例
/*function readFile(url){
return new Promise(function(resolve,reject){
fs.readFile(url,'utf8',function(err,data){
if(err){
reject(err);
return;
}
resolve(data);
})
})
};*/
//批量封装
//(读取类)
['mkdir', 'rmdir', 'readdir', 'readFile', 'copyFile', 'unlink'].forEach(function (item){
exports[item] = function (pathname, copypath = '') {
pathname = path.resolve(dirname, pathname);
console.log(pathname)
copypath = path.resolve(dirname, copypath);
return new Promise(function (resolve, reject) {
let arg = [function (err, data) {
if (err) {
reject(err);
return;
}
resolve(data || '');
}];
item === 'readFile' ? arg.unshift('utf8') : null;
item === 'copyFile' ? arg.unshift(copypath) : null;
fs[item](pathname, ...arg)
})
}
});
//(写入类)
['writeFile', 'appendFile'].forEach(function (item) {
exports[item] = function (pathname, content) {
pathname = path.resolve(dirname, pathname);
if (typeof content !== 'string') {
content = JSON.stringify(content)
};
return new Promise(function (resolve, reject) {
fs[item](pathname,content,'utf8',function(err,data){
if (err) {
reject(err);
return;
}
resolve(data || '')
})
})
}
})
调用
//=>合并并且压缩CSS
let {readFile, readdir, writeFile} = require('./utils/fsPromise');//引入要使用的方法
//1.先把所有的CSS文件读取出来
readdir('less').then(result => {//获取less文件下的css文件
return result.filter(item => /\.CSS$/i.test(item));
}).then(result => {//读取less文件下的css文件内容
let arg = [];
result.forEach(item => {
arg.push(readFile(`less/${item}`));//=>分别调取READ-FILE方法,读取捕捉到的CSS文件,向数组中依次增加读取各个文件的PROMISE实例
});
//arg=[promise1,promise2...] Promise.all:等待数组中所有的PROMISE实例都执行成功才算成功
return Promise.all(arg);
}).then(result => {//把读取的每个文件的内容进行拼接
//=>RESULT:一个数组,存放所有文件读取的内容
result = result.join('');
return result.replace(/( |\n|\r)/g, '');
}).then(result => {//写入一个新的文件中(没有的话会自动创建这个文件)
return writeFile('less/build.min.css', result);
}).then(() => {
console.log('创建成功');
});