• 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
       }
    
  • 相关阅读:
    [原创] 扩展jquery-treegrid插件, 实现勾选功能和全删按钮.
    [原创]多版本Java环境变量的配置
    [转]Redmine 配置163邮箱
    [转] --- Error: “A field or property with the name was not found on the selected data source” get only on server
    服务器控件中使用<%#...>, JS和html控件中使用<%=...>
    【字源大挪移—读书笔记】 第三部分:字尾
    【字源大挪移—读书笔记】 第二部分:字根
    使用WebClient 或者 HttpWebRequest均报:"The Remote name can't be solved"
    【字源大挪移—读书笔记】 第一部分:字首
    【英语魔法俱乐部——读书笔记】 3 高级句型-简化从句&倒装句(Reduced Clauses、Inverted Sentences) 【完结】
  • 原文地址:https://www.cnblogs.com/ooo51o/p/16135088.html
Copyright © 2020-2023  润新知