基于Node的命令行小工具——中英文翻译器

目录

导语

开发流程

1.准备工作

1.1 项目需求
1.2 项目功能描述
1.3 项目实施思路

2. 实施项目

2.1 node包的初始化
2.2 命令行工具的配置与测试
2.3 生产阶段
2.4 发布阶段

3. 演示效果图

后记

声明


导语

最近开发了一款简单的基于Node命令行小工具,可以进行中英文互译,现在分享给各位童鞋参考一番,源码地址已发布到小羊的【Github】,有兴趣的同学可以Star或Fork一下,以便日后可以亲手开发一个作为自己的小项目;

本篇文章主要是将在开发一个小项目时,在开发之前脑海里面大致应该有的思路是什么;


开发流程

1. 准备工作

1.1 项目需求
  • 制作一个可翻译的语言命令行小工具;
1.2 项目功能描述
  • 可翻译功能
  • 中英文互译
  • 格式化处理
1.3 项目实施思路
  • 环境部署
    • gitbash、node安装完毕;
    • node包的初始化;
    • 命令行工具的配置与测试;
  • 生产阶段
    • js文件;
    • 依赖;
  • 发布阶段
    • 文档描述;

2. 实施项目

2.1 node包的初始化;

新建测试项目目录,在项目目录下使用

$ npm init

初始化node包,然后在项目目录自动生成package.json配置文件,关于package.json可参考[阮一峰博客]


2.2 命令行工具的配置与测试;

新建一个bin文件夹,在宾文件夹内新建一个js文件用于命令行工具的测试;

在进入vim编辑器后,第一行配置一段#! /usr/bin/env node,表示当该js文件使用特定命令时是在node环境下运行的;


完成上述步骤后,在packjson.js中配置如下信息:

意思是在gitbash上运行命令demo,将直接在node环境在运行test.js文件;

然后使用:

$ npm publish

发布到npm管理平台;
发布之前如果没有申请用户名使用:

$ npm adduser

有的话如果没有登录过,则使用

$ npm login

注意每次修改文件并发布的话,都要改动版本号:

查看测试结果:


okay,没问题,则可以正式进入开发阶段:

2.3 开发阶段
  • 安装依赖——yargs和cololrs
    yargs模块可以捕获命令的输入参数,用法详见其官方文档,文档虽然很长,但是我们所用的语法很少,只有两个,自己参详;
    colors模块用于代码高亮;

    在项目目录下使用

$ npm install yargv --dev
$ npm instal colors --dev

安装依赖;

  • js文件部署
    核心业务逻辑分析如下,看官可以对照参考:
#! /usr/bin/env node

//业务逻辑
//1.turnout命令+中英文[args,--read,-r]
//捕获参数,使用yargs.argv对象;
//2.将捕获到的用户的输入参数传入有道云api的q(key)中,使用字符串拼接;
//3.使用http模块发送请求;
//4.成功接收数据后,对数据进行格式化处理;

var colors = require('colors');
var argv = require('yargs').argv,
    queryStr = encodeURI((argv._).join(" ")),
    read = argv.r || argv.read; 

if(!queryStr){
    console.log('word or sentence required...')
}else {
    sendInfo(queryStr)
}

if(read){
    console.log('waiting for the new function...')
}


function format(json){
    console.log('\n')
    
    var data = JSON.parse(json),
        pronTitle = "发音:",
        pron = data.basic.phonetic || "无",
        mainTitle = "翻译:",
        mainTrans = "",
        webTitle = "网络释义:",
        webTrans = "",
        template = "";

    var basic = data.basic,web = data.web;

    if(basic?basic:""){
        for(var i = 0 ; i< basic.explains.length ; i++){
            mainTrans += "\n\n"+basic.explains[i];
        }
    }
    
    if(web?web:""){
        for(var i = 0 ; i< web.length ; i++){
             webTrans += "\n\n"+(i+1)+": "+web[i].key.red.bold+"\n\n"
                      +  web[i].value.join(',');
        }
    }

    template = pronTitle.red.bold+pron+ "\n\n"
             + mainTitle.green.bold+mainTrans+"\n\n"
             + webTitle.blue.bold+webTrans;

    console.log(template);

}

function sendInfo(query){
        //发送翻译请求
    var http = require('http');

    // 1.用于请求的选项
    var options = {
       host: 'fanyi.youdao.com',
       port: '80',
       path: '/openapi.do?keyfrom=translation-tool&key=1730699468&type=data&doctype=json&version=1.1&q='+query    
    };

    // 处理响应的回调函数
    var callback = function(response){
       // 不断更新数据
       response.on('data', function(data) {
          format(data)
       });
       
       response.on('end', function() {
          // 数据接收完成
          console.log('\n')
          console.log("---------------");
       });
    }
    // 向服务端发送请求
    var req = http.request(options, callback);
    req.end();
}
2.4 发布阶段

除了使用

$ npm publish

发布到npm平台,完整的项目还应该有文档说明;

  • 文档描述

prue-translator

A simple CLI for translating between English and Chinese

Installation

Prerequisites:Node.jsandGit.

$ npm install -g prue-translator

Usage

$ turnout[translate,interpret] <word[sentence]> [--read][-r]

Version

v1.0.12

  1. able to interpret words between English and Chinese;
  2. highlight the result of interpretation;

v.1.1.0

  1. add extent commands with translate and interpret for translation;
    v.1.1.1
  2. add English Document for this CLI;

License

MIT


3. 演示效果图

  • 翻译中文
  • 翻译英文
  • 翻译句子

后记

关于bug

colors模块加载后,无法正确高亮代码;
无法显示特殊的音标;
上面两个问题暂时未解决,如有大神,欢迎指点;

声明

这个命令行小工具是小羊在饥人谷的若愚老师指导下以及参考谷内王康同学的作品完成的,如有更多问题欢迎进入饥人谷询问;
本文版权归作者和饥人谷所有,如需转载请私信;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容