javascript
const fs = require('fs')
const path = require('path')
/**
* @description: 获取完整的文件路径
* @param {*} url 路径
* @return {*} 返回完整的文件路径
*/
const getPath = (url) => {
return path.join(__dirname, url)
}
/**
* @description: 获取参数
* @return {*} target【目标文件夹】 source【源文件夹】
*/
function parseArgv() {
let arguments = process.argv.splice(2)
const target = arguments[0] || './copy'
const source = arguments[1] || './'
return { target, source }
}
/**
* @description: 是否是文件夹
* @param {*} pathDir 路径
* @return {*} true 是,false 否
*/
const isDir = (pathDir) => {
const path = getPath(pathDir)
let data = false
try {
data = fs.statSync(path).isDirectory()
return data
} catch (error) {
return data
}
}
/**
* @description: 获取文件夹列表
* @param {*} pathDir 路径
* @return {*} 文件列表
*/
const getDirList = (pathDir) => {
const path = getPath(pathDir)
return new Promise((resolve, reject) => {
fs.readdir(path, (err, data) => {
if (err) {
rejects(err)
}
resolve(data)
})
})
}
const exclude = ['node_modules', '.gitignore']
const main = async (target, source) => {
let list = await getDirList(source)
const except = [path.basename(target), path.parse(__filename).base]
list = list.filter((item) => {
return !except.includes(item)
})
isDir(target) ? '' : fs.mkdirSync(target, { recursive: true })
const copyFile = (list, target, source) => {
const result = list.filter((item) => {
return !exclude.includes(item)
})
result.forEach(async (item) => {
const path =
source.endsWith('./') || source.endsWith('/')
? './' + item
: source + '/' + item // 原始路径
const copyPath = target + '/' + item //复制的路径
if (isDir(path)) {
if (!fs.existsSync(copyPath)) {
await fs.mkdirSync(copyPath)
console.log(
`正在复制:文件夹从${getPath(path)}------->复制到${getPath(
copyPath
)} ======成功`
)
}
let needCopyList = await getDirList(path)
await copyFile(needCopyList, copyPath, path)
} else {
if (!fs.existsSync(copyPath)) {
fs.copyFileSync(path, copyPath)
console.log(
`正在复制:文件从${getPath(path)}------->复制到${getPath(
copyPath
)} ======成功`
)
}
}
})
}
copyFile(list, target, source)
}
const { target, source } = parseArgv()
main(target, source)