记录
复制文件
/**
* 文件夹复制
* @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
})
}
}
查看目录存在
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')
获取目录下的结构
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
}