日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

開(kāi)發(fā)自己的nodejs命令行工具并使用工具(nodejs 開(kāi)發(fā)工具)

需求來(lái)源于生活。

在日常開(kāi)發(fā)中,經(jīng)常會(huì)頻繁地做一些重復(fù)性的操作,作為一名程序員,解放雙手的時(shí)刻到了。

比如說(shuō):批量修改某些文件的后綴,我對(duì)于一些shell或者win下的命令不是很熟悉,稍微了解的就是自己的開(kāi)發(fā)語(yǔ)言,所以用熟悉的工具做事還是可以帶來(lái)一些成就感的。

下面我準(zhǔn)備針對(duì)這個(gè)小小的需求開(kāi)發(fā)一個(gè)自己的命令行,當(dāng)然如果能幫助到其他人,那就更加地滿(mǎn)足了。閑話(huà)不多說(shuō),下面直接開(kāi)始。

需求整理

  1. 可以對(duì)某個(gè)文件夾下的所有文件進(jìn)行后綴的修改
  2. 可以限定某類(lèi)后綴修改為指定的后綴
  3. 可以指定目標(biāo)文件夾
  4. 同時(shí)可以隨機(jī)重命名

準(zhǔn)備

環(huán)境 : nodejs編輯工具 : sublime

大體流程

  1. 在github上創(chuàng)建自己想要的倉(cāng)庫(kù)changeext(命名)
  2. 將倉(cāng)庫(kù)clone到本地進(jìn)行開(kāi)發(fā)、測(cè)試
  3. 發(fā)布到github
  4. 發(fā)布到npm
  5. 安裝到本地進(jìn)行使用大功告成

步驟分解

一些帳號(hào)注冊(cè)、倉(cāng)庫(kù)創(chuàng)建就不再說(shuō)了,主要說(shuō)下開(kāi)發(fā)的具體流程 先來(lái)一段偽代碼:

1.確定目標(biāo)文件夾、一些相關(guān)的參數(shù)(是否重命名、源后綴、目標(biāo)后綴)2.獲得目標(biāo)文件夾下的所有文件(符合源后綴)3.對(duì)符合條件的文件進(jìn)行重命名(修改后綴)4.結(jié)束,對(duì),流程很簡(jiǎn)單,實(shí)現(xiàn)起來(lái)也不麻煩,但是起碼這是自己的小工具啊,哪怕網(wǎng)上再多也是別人的

開(kāi)發(fā)中使用的module:

minimist(命令行參數(shù)處理) fs(操作文件) path(處理文件路徑) colors(讓打印信息更加好看)

核心代碼如下:

#!/usr/bin/env node//作為命令行工具,第一行就是上面的這貨,千萬(wàn)別少了var fs = require('fs');var path = require('path');var colors = require('colors');//指定一些顏色信息colors.setTheme({ error : 'red', success : 'green', info : 'yellow'});//獲得命令行的參數(shù)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);}//隨機(jī)獲得一個(gè)隨機(jī)字符串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){//不需要循環(huán),但是目標(biāo)路徑為文件夾 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); } }); } } } });}//校驗(yàn)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);}

然后我們就針對(duì)代碼進(jìn)行本地測(cè)試

開(kāi)發(fā)自己的nodejs命令行工具并使用工具(nodejs 開(kāi)發(fā)工具)

image.png

OK,測(cè)試成功,然后把代碼發(fā)布到github(此處流程可以google),然后將自己的代碼發(fā)布到npm官網(wǎng)。

npm publish //這里經(jīng)常出問(wèn)題 //1.首先,要注冊(cè)一個(gè)npm官網(wǎng)的帳號(hào)。 //2.然后登錄 npm login //3.確認(rèn)帳號(hào) npm whoami //4.發(fā)布即可。 有時(shí)候會(huì)發(fā)布報(bào)錯(cuò),可能的原因是 registry 改過(guò)了,只需要再改回來(lái)即可。 //npm config set registry http://registry.npmjs.orgnpm publish

然后,我們就可以開(kāi)心地下載自己的工具來(lái)666了。

命令行工具:changeext

本文中的命令行工具為 changeext

可以很方便地變更指定后綴到目標(biāo)后綴或重命名,同時(shí)附帶了一個(gè)簡(jiǎn)單的加密,可以悄悄地隱藏文件咯,比如:

//全局安裝npm i changeext -g //將mp4 修改為 bin文件,并做簡(jiǎn)單加密。默認(rèn)是在當(dāng)前執(zhí)行命令的目錄下查找并執(zhí)行changeext mp4 bin -e//如果要修改回來(lái)則是changeext bin mp4 -e

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線(xiàn)咨詢(xún)
分享本頁(yè)
返回頂部
双城市| 福泉市| 高唐县| 郴州市| 理塘县| 乐东| 茶陵县| 清新县| 古田县| 昂仁县| 青铜峡市| 偏关县| 荥阳市| 扬中市| 普兰店市| 鸡西市| 彭水| 武城县| 安图县| 张掖市| 綦江县| 尤溪县| 扎囊县| 宾阳县| 凤山市| 依安县| 顺昌县| 华容县| 格尔木市| 温泉县| 汪清县| 徐州市| 开封市| 高密市| 资源县| 香格里拉县| 漳平市| 安阳市| 固阳县| 繁昌县| 霞浦县|