node.js怎么运行(nodejs用什么开发工具)

需求来源于生活。

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

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

下面我准备针对这个小小的需求开发一个自己的命令行,当然如果能帮助到其他人,那就更加地满足了。闲话不多说,下面直接开始。

需求整理

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

准备

环境 : nodejs
编辑工具 : sublime

大体流程

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

步骤分解

一些帐号注册、仓库创建就不再说了,主要说下开发的具体流程 先来一段伪代码:

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);

}

然后我们就针对代码进行本地测试

   

image.png

OK,测试成功,然后把代码发布到github(此处流程可以google),然后将自己的代码发布到npm官网。

npm publish 
//这里经常出问题 
//1.首先,要注册一个npm官网的帐号。 
//2.然后登录 
npm login 
//3.确认帐号 
npm whoami 
//4.发布即可。 有时候会发布报错,可能的原因是 registry 改过了,只需要再改回来即可。 
//npm config set registry http://registry.npmjs.org
npm publish

然后,我们就可以开心地下载自己的工具来666了。

命令行工具:changeext

本文中的命令行工具为 changeext

可以很方便地变更指定后缀到目标后缀或重命名,同时附带了一个简单的加密,可以悄悄地隐藏文件咯,比如:

//全局安装
npm i changeext -g 
//将mp4 修改为 bin文件,并做简单加密。默认是在当前执行命令的目录下查找并执行
changeext mp4 bin -e
//如果要修改回来则是
changeext bin mp4 -e
(0)

相关推荐

  • node.js怎样运行JS文件呢

    Node给JS提供了一个运行环境,所以就有了nodeJS,今天咪咪我就来给大家分享一下node.js怎样运行JS文件,一起来看看吧! 操作方法 01 首先,安装nodeJS,安装过程没啥特殊的地方.安 ...

  • 五个提高Node.js应用性能技巧

    如果你的 node 服务器前面没有 nginx, 那么你可能做错了.- Bryan Hughes Node.js 是使用 最流行的语言- JavaScript 构建服务器端应用的领先工具 .由于可以同 ...

  • windows下如何安装node.js和服务器环境的搭建

    什么是Node.js?简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱 ...

  • Hbuilder怎样运行nodeJS程序呢

    nodeJS可以用来创建服务器,一般都是在cmd界面通过node命令来运行nodeJS程序的,不过也有一些好用的工具可以运行nodeJS程序,比如Hbuilder,今天咪咪我就来教教大家使用Hbuil ...

  • node.js怎样向文件写入内容呢

    node.js除了可以读取文件,还可以向文件写入内容.今天咪咪我就来教教大家node.js怎样向文件写入内容,一起来看看吧! 操作方法 01 第一步,先在Hbuilder里面新建JS文件和一个文本文件 ...

  • ubuntu下如何快速搭建 Node.js 开发环境

    Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用. nvm是nodejs版本管理工具.可以在多个nodejs版本中进行切换,降 ...

  • Visual Studio Code中如何搭建并运行NodeJS环境

    Visual Studio Code是NET平台下的最新开发工具,那么我们如何在这个工具下面搭建并运行NodeJS环境呢?下面小编给大家分享一下. 操作方法 01 首先我们打开Visual Studi ...

  • 阿里云Node.js环境

    简介 Node App Engine是基于Node.js v0.5.5开发的应用托管服务, 可提供node.js应用的在线部署功能. 使用注意 1. 系统node使用v0.5.5版,使用时请注意与0. ...

  • Node.js入门教程(一)

    操作方法 01 平时工作中主要应用的还是一些Java, Oralce, Websphere, QlikView, JavaScript,很少接触到新技术.于是在Ruby和Node.js之间犹豫了很久, ...