js自动创建对应目录文件夹

2019-09-27  本文已影响0人  Benny_lzb

项目中,因为要建views相对应的styles和scripts文件,由于懒..所以问了下度娘然后写了个符合自己需求的创建目录文件功能

效果图


创建home中的index.vue.png
image.png image.png
主要操作就是,建好view里头所有的视图文件,然后node执行以下代码的js文件,就会相对应生成styles和script文件

/**
 * @author: Benny
 * @description: 测试测试 自动创建文件
 * @param {type} 
 */
let fs = require('fs')
let path = require('path')


/**
 * @author: Benny
 * @description: 读取目录文件
 * @param {dir} 指定读取目录路径 
 */
function readFileList(dir,filesList = []){
    const files = fs.readdirSync(dir);
    files.forEach((item, index) => {
        var fullPath = path.join(dir, item);
        const stat = fs.statSync(fullPath);
        // console.log(path.dirname(fullPath))
        if (stat.isDirectory()) { //如果当前是文件目录     
            readFileList(path.join(dir, item), filesList);  //递归读取文件
        } else {                
            filesList.push(fullPath);                     
        }        
    });
    return filesList;
}

/**
 * @author: Benny
 * @description:递归创建目录 异步方法  
 * @param {dirname} 文件夹名称
 */
function mkdirs(dirname, callback) {  
    fs.exists(dirname, function (exists) {  
        if (exists) {  
            // 是个目录则执行callback方法
            callback();  
        } else { 
            // 递归调用mkdirs
            /*console.log(dirname);  
            console.log(path.dirname(dirname)); */ 
            mkdirs(path.dirname(dirname), function () {  
                fs.mkdir(dirname, callback);  
                console.log('在' + path.dirname(dirname) + '目录创建好' + dirname  +'目录');
            });  
        }  
    });  
} 

/**
 * @author: Benny
 * @description: 创建文件
 * @param {filename}  文件路径+名字
 */
function makeFiles(filename,content){
    fs.writeFile(filename,content,function (err) {
        if(err){
            console.log("error");
            return;
        }
        console.log(`创建${filename}成功`);

    })
}

let filesList = readFileList('src/views')
let jsTemplate = `export default {
    data() {
        return {

        }
    },
    created() {
        
    },
}`
let newList = []
filesList.forEach((item)=>{
    let jsItem = item.replace(/views/g,'scripts');
    newList.push(jsItem)
    let cssItem = item.replace(/views/g,'styles');
    newList.push(cssItem)

})

newList.forEach((item)=>{
    let dir = path.parse(item).dir //文件夹路径
    let filename = path.parse(item).name.replace(/^\_([A-Z])/g,function(str){
        return str.toLowerCase().replace(/\_/g,'')
    }) //文件名称
    let newFileNamePath;
    //包含style且排除block
    // if(dir.indexOf('styles')>0 && dir.indexOf('block') == -1 ){
    if(dir.indexOf('styles')>0){
        newFileNamePath = `${dir}/${filename}.less`
        mkdirs(dir,(data)=>{
            //如果文件已存在
            if(fs.existsSync(newFileNamePath)){
                console.log('已存在')
            }else{
                //生成文件
                makeFiles(newFileNamePath,'')
            }
        })
    }

    if(dir.indexOf('scripts')>0){
        newFileNamePath = `${dir}/${filename}.js`
        mkdirs(dir,(data)=>{
            //如果文件已存在
            if(fs.existsSync(newFileNamePath)){
                console.log('已存在')
            }else{
                //生成文件
                makeFiles(newFileNamePath,jsTemplate)
            }
        })
    }
 
})








上一篇下一篇

猜你喜欢

热点阅读