怎样开发自己的nodejs命令行工具

怎样开发自己的nodejs命令行工具

点点

2021-05-31 11:07 阅读 356 喜欢 0

日常开发中,经常会频繁的做一些重复性的操作,作为一名程序员,解放双手的时刻到了。

比如说:批量修改某些文件的后缀,对于一些shell或者win下的命令不是很熟悉,稍微了解的就是自己的开发语言,所以用熟悉的工具做事还是可以带来少许的成就感。

下面准备针对这个小小的需求开发一个自己的命令行,当然如果能帮助到其他人,那就更高兴啦。

需求整理

可以对某个文件夹下的所有文件进行后缀的修改 可以限定某类后缀修改为指定的后缀 可以指定目标文件夹 同时可以随机重命名

准备

nodejs的环境 编辑工具sublime npm 的帐号 github的帐号

大体流程

在github上创建自己想要的仓库changeext(命名) 将仓库clone到本地进行开发、测试 发布到github 发布到npm 安装到本地进行使用大功告成

步骤分解

1.确定目标文件夹、一些相关的参数(是否重命名、源后缀、目标后缀) 2.获得目标文件夹下的所有文件(符合源后缀) 3.对符合条件的文件进行重命名(修改后缀) 4.结束。流程很简单,实现起来也不麻烦,但是起码这是自己的小工具啊。 开发中使用的module: minimist(命令行参数处理) fs(操作文件) path(处理文件路径) colors(让打印信息更加好看)

代码如下:

 #!/usr/bin/env node
  //作为命令行工具,第一行就是上面的这货,千万别少了

 var fs = require('fs');

 var path = require('path');

  var colors = require('colors');
  //指定一些颜色信息
   colors.setTheme({
       error : 'red',
     success : 'green',
      info : 'yellow'
});
//获得命令行的参数
 var argv = require("minimist")(process.argv.slice(2), {
  alias: {
'input': 'i',
'target': 't',
'directory': 'd',
'loop' : 'l',
'random' : 'r'
 },
   string: ['input', 'target','directory'],
   boolean : ['loop','random'],
  'default': {
'directory': process.cwd()
   }
   });
    //打印帮助信息
    if (argv.help) {
    console.log("Usage:".info);
      console.log("  changeext --help     // print help information".success);
      console.log("  changeext txt js     // change 'txt' to 'js' ".success);
      console.log("  changeext -i txt     // input file extensions".success);
     console.log("  changeext -t js      // target file extensions".success);
     console.log("  changeext -d /home/  // target directory for                    change".success);
      console.log("  changeext -l         // loop file directory for change file          extensions".success);
       console.log("  changeext txt js -r  // get some random name");
       process.exit(0);
   }
 //随机获得一个随机字符串
  function getRandom(){
     var counter = 0;
      return (function() {
   var guid = (+new Date()).toString( 32 ),i = 0;
  for ( ; i < 5; i++ ) {
      guid += Math.floor( Math.random() * 65535 ).toString( 32 );
  }
  return  guid + (counter++).toString( 32 );
   })();
  }
 //重命名
     function rename (folderPath,input,target,loop){
        fs.stat(folderPath,function(err,stats){
if(err){
  console.log(err);
}else{
  if(stats.isDirectory()){

    if(loop === true && argv.loop === false){
      return false;
    }

    if(loop === false && argv.loop === false){//不需要循环,但是目标路径为文件夹
      loop = true;
    }

    fs.readdir(folderPath,function(err2,files){
      if(err2){
        console.log(err2);
      }else{
        if(files && files.length > 0){
          files.forEach(function(filename,index){

            rename(path.join(folderPath,filename),input,target,loop);

          });
        }
      }
    });
  }else{

    var extname = path.extname(folderPath);

    input = input.startsWith('.') || input == '' ? input : '.'+input;

    target = target.startsWith('.') || target == '' ? target : '.'+target;

    extname = extname.toLowerCase();

    input = input.toLowerCase();

    target = target.toLowerCase();

    if(extname === input){
      var newPath = "";
      if(argv.random){
        var randomName = getRandom() + target;
        newPath = path.join(path.dirname(folderPath),randomName);
      }else{
        newPath = folderPath.substring(0,folderPath.length - extname.length) + target;  
      }
      fs.rename(folderPath,newPath,function(err){
        if(err){
          console.log(err);
        }else{
          console.log('Rename file : '+folderPath.info +' => '+newPath.info+' success.'.success);  
        }
      });
    }
  }
}

   });
      }
     //校验
      if(argv.directory && fs.existsSync(argv.directory)){

        if( (argv.input && argv.target) || (argv.input === '' && argv.target) || (argv.input && argv.target === '') ){

rename(argv.directory,argv.input,argv.target,argv.loop);

         }else{
if(argv._[0] && argv._[1]){

  rename(argv.directory,argv._[0],argv._[1]);

}else{

  console.log('input file extensions and target file extensions must be not empty.'.error);  
  process.exit(0);

}
    }
   }else{

      console.log('directory is not exists.'.error);
       process.exit(0);

   }

把代码发布到github(此处流程可以google),将自己的代码发布到npm官网(此处可以查看:https://www.jianshu.com/p/e388af61f5dd)

就可以开心的下载自己的工具来666了。

转载请注明出处: http://sdxlp.cn/article/minglin.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
苹果手机微信语音没声音怎么办呢?很多用户对此还不是很清楚, 有很多小伙伴私信点点,点点这里就教给小伙伴们,苹果系统手机微信语音没声音的简单处理方法,希望能够对小伙伴们有所帮助。
平常生活中,我们很多的时候都会用到电脑,现在大部分电脑都是win10系统,有些用户遇到了无法安装软件问题,想知道如何解决?跟小编来。
有的小伙伴喜欢看抖音,有的小伙伴喜欢发布抖音视频,那么手机抖音APP上如何为视频添加地址呢?点点就来为小伙伴们介绍一下吧。
好用的下载有不少,我们如何不让迅雷接管其他下载?怎么不让迅雷自动接管下载任务?我们在电脑下载文件时喜欢使用迅雷接管下载,那如果不想使用迅雷下载,该怎么取消迅雷接管下载呢?
很多时候我们拿到新手机或者是更新全新的系统之后,都会或多或少新增一些功能,其中很多用户在使用小米手机的时候想要知道MIUI13怎么设置锁屏密码,这样可以保证手机的安全,下面就让小编给小伙伴们介绍一下。
微信根据接收的图片,语音,文字,通话不同,占用手机的内存大小也就不同。
日常生活中,我们经常用到微信,微信退了忘记了密码咋办?那么如何才能在不知道原始密码的情况下重置密码呢?
微信是全民都在使用的聊天社交平台,在很早之前微信就已经推出了,那几年过去了,怎么找到自己的微信账号注册时间呢,微信注册时间在哪里看,下面就和点点一起来看看吧!