从零开始搭建一个基于React框架的博客发布系统 (二)node操作文件脚本编写

开发node文件相关的操作

完整代码看这里

首先在根目录新建一个存放node脚本的文件夹,然后新建一个createNew.js,来实现指定位置生成markdown文件。

这个文件中需要引用额外的包有inquirer来实现一些命令行输入操作,以及moment来处理一些时间的操作。

yarn add moment,yarn add inquirer来完成操作。

下面做一些关键代码的粘贴:

前面是一些规则和模版的声明,不赘述,感兴趣的可以尝试输入一下违规的字符看一下效果。

inquirer
    .prompt(questions)
    .then(rst => {  //获取用户的输入
        const {post_name,tags} = rst;
        // console.log('name',post_name,'tag',tags)
        let newPost = JSON_TEMPLATE;
        JSON_TEMPLATE.tags = [...new Set(tags.split(','))];
        if(!fs.existsSync('src/articles/'+tags)){
            fs.mkdir('src/articles/'+tags,(err,rst)=>{
                if(err){
                    console.log('创建一级文章目录报错',err);
                    return;
                }
                if(!fs.existsSync('src/articles/'+tags+'/'+post_name)){
                    generateSecLevel(tags,post_name)
                }else{
                    console.log('文章目录已经存在,请重新创建')
                }
            })
        }else{
            if(!fs.existsSync('src/articles/'+tags+'/'+post_name)){
                generateSecLevel(tags,post_name)
            }else{
                console.log('文章目录已经存在,请确认后创建')
            }
        }
    })

    generateSecLevel = (tags,post_name) =>{
        fs.mkdir('src/articles/'+tags+'/'+post_name,(err,rst)=>{
            if(err){
                console.log('创建二级文章目录报错',err);
                return;
            }
            console.log('创建文章目录成功');
            fs.writeFile('src/articles/' + tags + '/' + post_name + '/' + 'main.md', '在此写入您的文章', (err =>{
                if(err){
                    console.log(err);
                    return;
                }
                console.log('创建文章成功,请开始你的表演。')
            }))
            fs.writeFile('src/articlesHelper/fileMap.json',JSON.stringify(tools.generateFileMap('src/articles/')),(err => {
                if(err){
                    console.log(err);
                    return
                }
                console.log('更新文件地图成功');
            }))
            fs.writeFile('src/articles/'+tags+'/'+post_name+'/'+'basicInfo.json',JSON.stringify({
                time:JSON_TEMPLATE.createTime
            }),(err =>{
                if(err){
                    console.log(err)
                    return
                }
                console.log('创建基础信息成功');
            }))
            copyTemplate('src/articlesHelper/exposerTemplate.js', 'src/articles/' + tags + '/' + post_name + '/' + 'index.js');
        })
    }

    copyTemplate = (come,to) => {
        let rs = fs.createReadStream(come)
        let ws = fs.createWriteStream(to);
        rs.pipe(ws);
    }

prompt指令有两个步骤,首先输入文章的名字,然后给文章加一个标签。这个作为文章的一级目录,也就是同样标签的文章会被初始化到一个文件夹下面。并且代码中做了检测,如果新建的文章名称已经存在了,会提示重新创建。generateSecLevel这个方法用来创建新的文章,文章名称默认main.md,大家可以看到这里有一个更新文件地图的操作,这是通过读取本地aritcles文件夹,生成一个文件目录的json文件,方便读取。

最后一个函数,是拷贝一个模版到生成文章的目录,统一的规范,可以自己定义。

当然了,看到代码以后你会发现第一级目录,也就是articles并没有创建,所以要正常使用功能还是要自己在src下面创建一个articles文件夹的。

最后一步:大家可以看到package.json文件,命令都是从这个文件里面写的,现在要在scripts中,添加

"postArticle": "node nodeScripts/createNew.js"

然后运行命令,yarn postArticle就可以自动执行createNew.js这个脚本了。

给一个创建成功的截图:

这里写图片描述

这里写图片描述

生成的文件夹共三个文件,第一个两个通过createNew生成的,还有一个是引入进来的。

现在,正在步入佳境。

猜你喜欢

转载自blog.csdn.net/run_youngman/article/details/80763459