nodejs开源项目 nodejs高级编程使用
需求来源于生活 。在日常开发中,经常会频繁地做一些重复性的操作,作为一名程序员,解放双手的时刻到了 。
比如说:批量修改某些文件的后缀,我对于一些shell或者win下的命令不是很熟悉,稍微了解的就是自己的开发语言,所以用熟悉的工具做事还是可以带来一些成就感的 。
下面我准备针对这个小小的需求开发一个自己的命令行,当然如果能帮助到其他人,那就更加地满足了 。闲话不多说,下面直接开始 。
需求整理
- 可以对某个文件夹下的所有文件进行后缀的修改
- 可以限定某类后缀修改为指定的后缀
- 可以指定目标文件夹
- 同时可以随机重命名
环境 : nodejs编辑工具 : sublime
大体流程- 在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 );}returnguid + (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.orgnpm publish
然后,我们就可以开心地下载自己的工具来666了 。命令行工具:changeext本文中的命令行工具为 changeext
可以很方便地变更指定后缀到目标后缀或重命名,同时附带了一个简单的加密,可以悄悄地隐藏文件咯,比如:
【nodejs开源项目 nodejs高级编程使用】
//全局安装npm i changeext -g //将mp4 修改为 bin文件,并做简单加密 。默认是在当前执行命令的目录下查找并执行changeext mp4 bin -e//如果要修改回来则是changeext bin mp4 -e
推荐阅读
- 具体有哪些项目 汽车美容包括哪些
- 国内cdn开源系统操作 计算机机房管理系统
- java中取绝对值方法 java开发简历项目经验怎么写
- 世界第一体育运动项目是什么
- java开始写代码技巧 java项目经验怎么写范例
- thinkphp开源cms系统操作 thinkphp商城源码安装教程
- 项目管理师pmp报考条件 pmp自学教程
- 国内cdn开源系统操作 cdn项目怎么做
- 项目管理的工作思路 项目管理专家要求
- 软件开发项目管理整个流程图 软件项目开发计划