登录|注册|帮助中心|联系我们

导航
首页 综合百科 生活常识 数码科技 明星名人 传统文化 互联网 健康 影视 美食 教育 旅游 汽车 职场 时尚 运动 游戏 家电 地理 房产 金融 节日 服饰 乐器 歌曲 动物 植物
当前位置:首页 > 互联网

nodejs高级编程使用(nodejs开源项目)

发布时间:2023年1月7日责任编辑:江小明标签:项目js
?

需求来源于生活。

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

比如说:批量修改某些文件的后缀,我对于一些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 ); ?????} ?????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.wf

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

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

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

其它知识推荐

溜溜百科知识网——分享日常生活学习工作各类知识。 垃圾信息处理邮箱 tousu589@163.com
icp备案号 闽ICP备14012035号-2 互联网安全管理备案 不良信息举报平台 Copyright 2023 www.6za.net All Rights Reserved