node操作

记录

复制文件

/**
 * 文件夹复制
 * @param {string} source 源文件夹
 * @param {string} destination 目标文件夹
 */
// 主要版本
let major = process.version.match(/v([0-9]*).([0-9]*)/)[1]
// 特性版本
let minor = process.version.match(/v([0-9]*).([0-9]*)/)[2]
function cpSync(source, destination) {
	// 判断node版本不是16.7.0以上的版本
	// 则进入兼容处理
	// 这样处理是因为16.7.0的版本支持了直接复制文件夹的操作
	if (Number(major) < 16 || Number(major) == 16 && Number(minor) < 7) {
		// 如果存在文件夹 先递归删除该文件夹
		if (fs.existsSync(destination)) fs.rmSync(destination, {
			recursive: true
		})
		// 新建文件夹 递归新建
		fs.mkdirSync(destination, {
			recursive: true
		});
		// 读取源文件夹
		let rd = fs.readdirSync(source)
		for (const fd of rd) {
			// 循环拼接源文件夹/文件全名称
			let sourceFullName = source + "/" + fd;
			// 循环拼接目标文件夹/文件全名称
			let destFullName = destination + "/" + fd;
			// 读取文件信息
			let lstatRes = fs.lstatSync(sourceFullName)
			// 是否是文件
			if (lstatRes.isFile()) fs.copyFileSync(sourceFullName, destFullName);
			// 是否是文件夹
			if (lstatRes.isDirectory()) cpSync(sourceFullName, destFullName);
		}
	} else {
		fs.cpSync(source, destination, {
			force: true,
			recursive: true
		})
	}
}

查看目录存在

  • existsSync会返回truefalse
let fs = require('existsSync')
let url = './node'
if( fs.existsSync(url) ){
  console.log('存在')
}else{
  console.log('不存在')
}

打开浏览器

const openDefaultBrowser = function (url) {
  var exec = require('child_process').exec;
  console.log(process.platform)
  switch (process.platform) {
    case "darwin":
      exec('open ' + url);
      break;
    case "win32":
      exec('start ' + url);
      break;
    default:
      exec('xdg-open', [url]);
  }
}
openDefaultBrowser('https://www.baidu.com')

获取目录下的结构

  • 获取当前目录 process.cwd()
 function getAll(level, dir) {
    dir?=process.cwd()
     let path = require('path');
     let fs = require('fs');
     var filesNameArr = []
     let cur = 0
     // 用个hash队列保存每个目录的深度
     var mapDeep = {}
     mapDeep[dir] = 0
     // 先遍历一遍给其建立深度索引
     function getMap(dir, curIndex) {
       var files = fs.readdirSync(dir) //同步拿到文件目录下的所有文件名
       files.map(function (file) {
         //var subPath = path.resolve(dir, file) //拼接为绝对路径
         var subPath = path.join(dir, file) //拼接为相对路径
         var stats = fs.statSync(subPath) //拿到文件信息对象
         // 必须过滤掉node_modules文件夹
         if (file != 'node_modules') {
           mapDeep[file] = curIndex + 1
           if (stats.isDirectory()) { //判断是否为文件夹类型
             return getMap(subPath, mapDeep[file]) //递归读取文件夹
           }
         }
       })
     }
     getMap(dir, mapDeep[dir])
     function readdirs(dir, folderName, myroot) {
       var result = { //构造文件夹数据
         path: dir,
         title: path.basename(dir),
         type: 'directory',
         deep: mapDeep[folderName]
       }
       var files = fs.readdirSync(dir) //同步拿到文件目录下的所有文件名
       result.children = files.map(function (file) {
         //var subPath = path.resolve(dir, file) //拼接为绝对路径
         var subPath = path.join(dir, file) //拼接为相对路径
         var stats = fs.statSync(subPath) //拿到文件信息对象
         if (stats.isDirectory()) { //判断是否为文件夹类型
           return readdirs(subPath, file, file) //递归读取文件夹
         }
         return { //构造文件数据
           path: subPath,
           name: file,
           type: 'file'
         }
       })
       return result //返回数据
     }
     filesNameArr.push(readdirs(dir, dir))
     return filesNameArr
   }
posted @ 2022-04-12 14:40  小泽沐优声  阅读(27)  评论(0编辑  收藏  举报