目录
导语
开发流程
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
$ npm install -g prue-translator
Usage
$ turnout[translate,interpret] <word[sentence]> [--read][-r]
Version
v1.0.12
- able to interpret words between English and Chinese;
- highlight the result of interpretation;
v.1.1.0
- add extent commands with
translate
andinterpret
for translation;
v.1.1.1 - add English Document for this CLI;
License
3. 演示效果图
- 翻译中文
- 翻译英文
- 翻译句子
后记
关于bug
colors模块加载后,无法正确高亮代码;
无法显示特殊的音标;
上面两个问题暂时未解决,如有大神,欢迎指点;
声明
这个命令行小工具是小羊在饥人谷的若愚老师指导下以及参考谷内王康同学的作品完成的,如有更多问题欢迎进入饥人谷询问;
本文版权归作者和饥人谷所有,如需转载请私信;