实践平面数据导出工具

82 阅读1分钟

package.json文件

{

"name": "molar-fileflat",

"version": "1.0.0",

"description": "",

"main": "index.js",

"bin": {

"molarflat": "src/bin/flat"

},

"keywords": [],

"devDependencies": {

"inquirer": "^7.3.3",

"commander": "^9.3.0"

},

"author": "",

"license": "ISC"

}

exporter.js

const fs = require('fs')

const path = require('path')

let rootPath

async function isFoldExits(currentPath,exportDir){

const absPath = path.resolve(currentPath,exportDir)

try {

await fs.promises.stat(absPath)

}catch(e){

await fs.promises.mkdir(absPath,{recursive:true})

}

}

function exportFileToDir(filePath,exportDir){

isFoldExits(filePath,exportDir)

rootPath = filePath

function displayFileToDir(filepath,exportDir){

fs.readdir(filepath,function(err,files){

files.forEach((filename)=>{

const fileDir = path.join(filepath,filename)

fs.stat(fileDir,function(err,stats){

const isFile = stats.isFile()

const isDir = stats.isDirectory()

if(isFile){

let destPath = rootPath+`/${exportDir}/`+filename

fs.rename(fileDir,destPath,function(err){

if(err){console.log(err)}

})

}

if(isDir){

displayFileToDir(fileDir,exportDir)

}

})

})

})

}

displayFileToDir(filePath,exportDir)

}

module.exports = {exportFileToDir}

creator.js

const path = require('path')

const fs = require('fs')

const Inquirer = require('inquirer')

const {exportFileToDir} = require('../utils/exporter')

module.exports = async function(exportDirName,options){

const cwd = process.cwd()

const targetDir = path.join(cwd,exportDirName)

if(fs.existsSync(targetDir)){

if(options.force){

await fs.remove(exportDirName)

}else{

let {action} = Inquirer.prompt([

{

name: 'action',

type: 'list',

choices: [

{

name: '覆盖该文件夹',

value: 'overwrite'

},

{

name: '取消操作',

value: 'cancel'

}

]

}

])

if(!action){

return

}else if(action === 'overwrite'){

console.log("\r\n正在移除该文件夹...")

await fs.remove(exportDirName)

}

}

}

exportFileToDir(process.cwd(),exportDirName)

}
#! /usr/bin/env node

  


const program=require('commander')

  


const exec = require('child_process').execSync

  


program.command('export <dir-name>')

.description('该命令将文件平面导出到特定文件夹')

.option('-f,--force','强制将文件导入该目录')

.action((name,cmd)=>{

require('../lib/creator')(name,cmd)

})

  


program

.on('--help',function(){

console.log()

console.log(`正在运行 <command> --help,查看帮助命令`)

console.log()

})

  


program

.version(`molarflat@${require('../../package.json').version}`)

.usage(`<command> [options]`)

program.parse(process.argv)