Node.js寫腳本常用代碼

實現了個輸入命令創建文件、執行git的node腳本,大雜燴,將用過的點子收集了一下:

///// dabao.js
const {execSync} = require('child_process');    //執行腳本代碼
const chalk = require('chalk'); //顏色插件
const inquirer = require('inquirer');   //用戶交互插件(需要install)
const os = require('os');   //操作系統
const ora = require('ora'); //狀態樣式插件
const fs = require('fs');   //文件系統 

process.stdout.write('abcded \n\n11')//與console基本相同,一點細節不一樣,如最後沒自動加換行符
process.argv.map((item)=>{  //獲取指令參數 如 node dabao.js ok -haha   1.node執行程序地址 2.被執行文件地址 3~.指令參數 
    if(item.indexOf('ok') > -1){
        console.log('ok 命中')
    }
})
const spinner = ora('Loading unicorns').start();
 
setTimeout(() => {
    spinner.color = 'yellow';
    spinner.text = 'Loading rainbows';
}, 1000);
setTimeout(() => {
    spinner.stop()
},2500)


  inquirer.prompt([//用戶界面交互
    {
      type: 'confirm',
      name: 'confirm',
      message: 'sure to package?',
    }
  ]).then(answers1 => {
    console.log(answers1)
    if(answers1.confirm){
      inquirer.prompt([//用戶界面交互
        {
          type: 'Input',
          name: 'dirname',
          message: 'write dirname:',
        },
        {
          type: 'Input',
          name: 'filename',
          message: 'write filename:',
        },
        {
          type: 'Input',
          name: 'message',
          message: 'write message:',
        }
      ]).then(answers2 => {
        if((answers2.dirname).indexOf('--c') != -1){
          var _dirname = (answers2.dirname).slice(0 ,(answers2.dirname).indexOf(' '))
          fs.exists(_dirname, function(exists) { //判斷文件是否存在
           if(exists){
              delDir(_dirname)
              delDir('.git')
              console.log(chalk.green('clean up...\n'));
            }else{
              console.log(chalk.red('dir is not exist.\n'));
            }
          })
        }else{
          if(answers2.dirname && answers2.filename && answers2.message){
            fs.exists(answers2.dirname, function(exists) { //判斷文件是否存在
              if(!exists){
                doSomething(answers2.dirname,answers2.filename,answers2.message)
                console.log(chalk.green('bundle done...\n'));
              }else{
                console.log(chalk.red('dir is already exist,or use "\'dirname\'  --c" to delete the floder\n'));
              }
            })
          }else{
            console.log(chalk.red('cant left empty items.\n'));
          }
        }
      })
    }else{
      console.log(chalk.red('you quit...\n'));
    }
  });


/////////////////////函數存放點////////////////////////////
function delDir(path){
  let files = [];
  if(fs.existsSync(path)){
    files = fs.readdirSync(path);
    files.forEach((file, index) => {
        let curPath = path + "/" + file;
        if(fs.statSync(curPath).isDirectory()){
            delDir(curPath); //遞歸刪除文件夾
        } else {
            fs.unlinkSync(curPath); //刪除文件
        }
    });
    fs.rmdirSync(path);
  }
}

async function doSomething(dirName='./新建文件夾',fileName='writed.js',fileContent='console.warn("Created by dabao.js")'){
  await fs.mkdir(dirName)
  fs.writeFileSync(dirName+'/'+fileName, fileContent, 'utf8');
  console.log(os.type())//獲得操作系統
  execSync(`git init`)//////做你想做的
}
/////////////////////////////////////////////////

運行 node dabao.js ,執行效果如下在這裏插入圖片描述

node.js api詳詢 http://nodejs.cn/api/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章