一大波更新
							parent
							
								
									4c949fadd7
								
							
						
					
					
						commit
						5453b999be
					
				
							
								
								
									
										10
									
								
								History.md
								
								
								
								
							
							
						
						
									
										10
									
								
								History.md
								
								
								
								
							|  | @ -1,4 +1,12 @@ | |||
| # 1.2.1 / 2020-01-02 | ||||
| # 1.3.0 / 2020-01-08 | ||||
| * [A] 增加chown()方法  | ||||
| * [A] cp()和 mv()支持对目录进行操作 | ||||
| * [U] 优化异常处理, 友好的输出, 不终止代码往下执行 | ||||
| * [U] 支持新版本node使用新API | ||||
| * [U] rm()方法自动识别目录,不再需要提供第2个参数 | ||||
| 
 | ||||
| 
 | ||||
| # 1.2.2 / 2020-01-02 | ||||
| * [F] 修复改回同步时回调未移除, 导致在node v12.10报错的bug  | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										25
									
								
								Readme.md
								
								
								
								
							
							
						
						
									
										25
									
								
								Readme.md
								
								
								
								
							|  | @ -3,28 +3,37 @@ | |||
| # iofs | ||||
| > `iofs`是一个基于原生`fs`模块封装的工具, 旨在提供更加方便实用一些常用的API方法(同步), API习惯参考了`bash shell`, 习惯用命令行的朋友, 可能会比较亲切。 | ||||
| 
 | ||||
| ## 更新日志 | ||||
| [Change Logs](./History.md) | ||||
| 
 | ||||
| 
 | ||||
| ## 属性  | ||||
| 
 | ||||
| ### origin | ||||
| - origin | ||||
| > 返回原生的`fs`模块对象, 方便调用一些未封装的额外功能 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ## APIs | ||||
| 
 | ||||
| ### .cat(file) | ||||
| - file `<String>` 文件路径 | ||||
| 
 | ||||
| - .cat() | ||||
| > 读取文件, 返回一个`Buffer对象` | ||||
| 
 | ||||
| | 参数 | 类型 | 是否必须 | 说明 | | ||||
| | :--: | :--: | :--: | -- | | ||||
| | file |  `<String>`  |  是  | 要读取的文件路径 | | ||||
| 
 | ||||
| 
 | ||||
| ### .ls(path, recursion) | ||||
| - path `<String>` | ||||
| - recursion `<Boolean>` | ||||
| 
 | ||||
| 
 | ||||
| - .ls() | ||||
| > 列出指定目录下的所有文件&目录, 不包括 '.' and '..'. 结果返回一个数组. | ||||
| > 如果参数`recursion`设为ture, 则会递归遍历所有子目录. | ||||
| 
 | ||||
| | 参数 | 类型 | 是否必须 | 说明 | | ||||
| | :--: | :--: | :--: | -- | | ||||
| | path |  `<String>`  |  是  | 要读取的目录 | | ||||
| | recursive |  `<String>`  |  否  | 是否递归读取 | | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ### echo(data, file[, append][, encode]) | ||||
|  |  | |||
							
								
								
									
										168
									
								
								index.js
								
								
								
								
							
							
						
						
									
										168
									
								
								index.js
								
								
								
								
							|  | @ -9,6 +9,11 @@ | |||
| const FS = require('fs') | ||||
| const PATH = require('path') | ||||
| 
 | ||||
| const VERSION = +process.versions.node | ||||
|   .split('.') | ||||
|   .slice(0, 2) | ||||
|   .join('.') | ||||
| 
 | ||||
| const Iofs = { | ||||
|   origin: FS, | ||||
| 
 | ||||
|  | @ -31,10 +36,10 @@ const Iofs = { | |||
|   /** | ||||
|    * [ls 读取整个目录(不遍历子目录)] | ||||
|    * @param  {string} dir [目标路径] | ||||
|    * @param  {boolean} recursion [是否递归遍历子目录] | ||||
|    * @param  {boolean} recursive [是否递归遍历子目录] | ||||
|    * @return {array}      [返回目标目录所有文件名和子目录名, 不包括'.'和'..'] | ||||
|    */ | ||||
|   ls(dir, recursion) { | ||||
|   ls(dir, recursive) { | ||||
|     try { | ||||
|       var list = FS.readdirSync(dir) | ||||
| 
 | ||||
|  | @ -42,7 +47,7 @@ const Iofs = { | |||
|         list[i] = PATH.resolve(dir, it) | ||||
|       }) | ||||
| 
 | ||||
|       if (recursion) { | ||||
|       if (recursive) { | ||||
|         var tmp = list.concat() | ||||
|         tmp.forEach(it => { | ||||
|           if (this.isdir(it)) { | ||||
|  | @ -52,9 +57,7 @@ const Iofs = { | |||
|       } | ||||
|       return list | ||||
|     } catch (err) { | ||||
|       if (err) { | ||||
|         console.error(err + '') | ||||
|       } | ||||
|       console.error(err) | ||||
|       return null | ||||
|     } | ||||
|   }, | ||||
|  | @ -87,20 +90,43 @@ const Iofs = { | |||
|       } | ||||
|     } | ||||
| 
 | ||||
|     if (!!append) { | ||||
|       FS.appendFileSync(file, data, opt) | ||||
|     } else { | ||||
|       FS.writeFileSync(file, data, opt) | ||||
|     try { | ||||
|       if (!!append) { | ||||
|         FS.appendFileSync(file, data, opt) | ||||
|       } else { | ||||
|         FS.writeFileSync(file, data, opt) | ||||
|       } | ||||
|       return true | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   //修改权限
 | ||||
|   chmod(path, mode) { | ||||
|     FS.chmodSync(path, mode) | ||||
|     try { | ||||
|       FS.chmodSync(path, mode) | ||||
|       return true | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   //修改所属用户
 | ||||
|   chown(path, uid, gid) { | ||||
|     try { | ||||
|       FS.chownSync(path, uid, gid) | ||||
|       return true | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   /** | ||||
|    * [mv 移动文件,兼具重命名功能] | ||||
|    * [mv 移动文件&目录,兼具重命名功能] | ||||
|    * @param  {String} origin [原路径/原名] | ||||
|    * @param  {String} target   [目标路径/新名] | ||||
|    */ | ||||
|  | @ -110,45 +136,74 @@ const Iofs = { | |||
|       this.mkdir(updir) | ||||
|     } | ||||
| 
 | ||||
|     FS.rename(origin, target, err => { | ||||
|       if (err) { | ||||
|         var rs = FS.createReadStream(origin) | ||||
|         var ws = FS.createWriteStream(target) | ||||
| 
 | ||||
|         rs.pipe(ws) | ||||
|         rs.on('end', err => { | ||||
|           this.rm(origin) | ||||
|         }) | ||||
|     try { | ||||
|       FS.renameSync(origin, target) | ||||
|     } catch (err) { | ||||
|       if (~err.message.indexOf('cross-device')) { | ||||
|         if (this.cp(origin, target)) { | ||||
|           return this.rm(origin) | ||||
|         } | ||||
|         return false | ||||
|       } | ||||
|     }) | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   /** | ||||
|    * [cp 复制文件&目录] | ||||
|    * @param  {String} origin [原路径] | ||||
|    * @param  {String} target   [目标路径] | ||||
|    */ | ||||
|   cp(origin, target) { | ||||
|     var updir = PATH.parse(target).dir | ||||
|     if (!this.isdir(updir)) { | ||||
|       this.mkdir(updir) | ||||
|     try { | ||||
|       // 如果是目录, 则递归操作
 | ||||
|       if (this.isdir(origin)) { | ||||
|         this.mkdir(target) | ||||
|         var list = this.ls(origin) | ||||
|         list.forEach(val => { | ||||
|           let name = PATH.parse(val).base | ||||
|           this.cp(val, PATH.join(target, name)) | ||||
|         }) | ||||
|       } else { | ||||
|         var updir = PATH.parse(target).dir | ||||
|         if (!this.isdir(updir)) { | ||||
|           this.mkdir(updir) | ||||
|         } | ||||
| 
 | ||||
|         var rs = FS.createReadStream(origin) | ||||
|         var ws = FS.createWriteStream(target) | ||||
|         rs.pipe(ws) | ||||
|       } | ||||
| 
 | ||||
|       return true | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
| 
 | ||||
|     var rs = FS.createReadStream(origin) | ||||
|     var ws = FS.createWriteStream(target) | ||||
| 
 | ||||
|     rs.pipe(ws) | ||||
|   }, | ||||
| 
 | ||||
|   /** | ||||
|    * [rm 删除文件/目录] | ||||
|    * @param  {[type]} origin      [源文件/目录路径] | ||||
|    * @param  {[type]} recursion [是否递归删除,若删除目录,此值须为true] | ||||
|    */ | ||||
|   rm(origin, recursion) { | ||||
|     if (recursion) { | ||||
|       var list = this.ls(origin) | ||||
|       list.forEach(it => { | ||||
|         this.rm(it, this.isdir(it)) | ||||
|       }) | ||||
|       FS.rmdirSync(origin) | ||||
|     } else { | ||||
|       FS.unlinkSync(origin) | ||||
|   rm(origin) { | ||||
|     try { | ||||
|       if (this.isdir(origin)) { | ||||
|         if (VERSION > 12.1) { | ||||
|           FS.rmdirSync(origin, { recursive: true }) | ||||
|         } else { | ||||
|           var list = this.ls(origin) | ||||
|           list.forEach(it => this.rm(it)) | ||||
|           FS.rmdirSync(origin) | ||||
|         } | ||||
|       } else { | ||||
|         FS.unlinkSync(origin) | ||||
|       } | ||||
|       return true | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|  | @ -160,6 +215,7 @@ const Iofs = { | |||
|     try { | ||||
|       return FS.statSync(path) | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return null | ||||
|     } | ||||
|   }, | ||||
|  | @ -172,6 +228,7 @@ const Iofs = { | |||
|     try { | ||||
|       return this.stat(path).isDirectory() | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
|  | @ -179,18 +236,31 @@ const Iofs = { | |||
|   /** | ||||
|    * [mkdir 新建目录] | ||||
|    * @param  {String} dir [目标路径] | ||||
|    * @param {Number} mode [目录权限, node v10.12起支持] | ||||
|    */ | ||||
|   mkdir(dir) { | ||||
|     var updir = PATH.parse(dir).dir | ||||
|     if (!updir) { | ||||
|       return | ||||
|     } | ||||
|   mkdir(dir, mode = 0o755) { | ||||
|     try { | ||||
|       if (VERSION > 10.12) { | ||||
|         FS.mkdirSync(dir, { recursive: true, mode: mode }) | ||||
|       } else { | ||||
|         var updir = PATH.parse(dir).dir | ||||
|         if (!updir) { | ||||
|           console.error('Wrong dir path') | ||||
|           return false | ||||
|         } | ||||
| 
 | ||||
|     if (!this.isdir(updir)) { | ||||
|       this.mkdir(updir) | ||||
|     } | ||||
|         if (!this.isdir(updir)) { | ||||
|           this.mkdir(updir) | ||||
|         } | ||||
| 
 | ||||
|     FS.mkdirSync(dir) | ||||
|         FS.mkdirSync(dir) | ||||
|         this.chmod(dir, mode) | ||||
|       } | ||||
|       return true | ||||
|     } catch (err) { | ||||
|       console.error(err) | ||||
|       return false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   /** | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| { | ||||
|   "name": "iofs", | ||||
|   "version": "1.2.2", | ||||
|   "version": "1.3.0", | ||||
|   "description": "Base on native fs module, for easy using.", | ||||
|   "main": "index.js", | ||||
|   "repository": { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 宇天
						宇天