基本思路
- 在node.js中使用百度翻译API进行文字翻译。
- 通过第一个字符的值为a~z或A~Z来判断是中译英还是英译中。
- 全程使用ts进行类型申明。
方法实现
安装 commander
yarn add commander
安装 ts-node-dev
yarn add ts-node-dev --dev
安装 md5
yarn add md5
入口文件cli.ts
#!/usr/bin/env node
import * as commander from "commander";
import {translate} from './main'
const pkg = require('../package.json')
const program = new commander.Command()
program.
version(pkg.version)
.name('fy')
.usage('<English>')
.arguments('<English>')
.action((english) => {
translate(english)
});
program.parse(process.argv)
主内容文件 main.ts
import md5 from "md5"; // md5签名算法
import {appId, appSecret} from "./private";
import * as querystring from "querystring";
import * as https from "https"; //node https模块
type ErrorMap = { // 申明错误类型
[key: string]: string
}
const errorMap: ErrorMap = {
52003: '用户认证失败',
52001: '签名错误',
52004: '账户余额不足',
}
export const translate = (word: string) => {
const salt = Math.random()
const sign = md5(appId + word + salt + appSecret)
let from, to
if (/[a-zA-Z]/.test(word[0])) {
from = 'en'
to = 'zh'
} else {
from = 'zh'
to = 'en'
}
const query: string = querystring.stringify({
q: word, appid: appId, salt, sign, from, to,
})
const options = {
hostname:'api.fanyi.baidu.com',
port: 443,
path: '/api/trans/vip/translate?' + query,
method: 'GET'
}
const request = https.request(options, response => {
// Buffer(缓冲区) 处理像TCP流或文件流时,必须使用到二进制数据。因此node.js中Buffer类用来专门存放二进制数据的缓存区
let chunks: Buffer[] = []
response.on('data', chunk => {
chunks.push(chunk)
})
response.on('end', ()=> {
const string = Buffer.concat(chunks).toString()
type BaiduResult = {
error_code?: string;
error_msg?: string;
from: string;
to: string;
trans_result: {src: string; dst: string}[]
}
const object: BaiduResult = JSON.parse(string)
if (object.error_code) {
console.error(errorMap[object.error_code] || object.error_msg)
process.exit(2) // 因错误而结束进程
} else {
object.trans_result.map(object => {
console.log(object.dst);
})
process.exit(0) // 因正确而结束进程
}
})
})
request.on('error', err => {
console.error(err)
})
request.end()
}
全局安装typescript
yarn global add typescript
生成ts config配置文件
tsc --init
修改outDir,将目录改为dist/。
这时可在命令行输入命令tsc,查看typescript语法有无报错。
自动生成dist目录,将ts编译为js文件
tsc -p .
修改package.json文件
"bin": {
"fy": "dist/cli.js" // 我这里的翻译工具的命令行开头取名为 fy,例如 fy hello,你可以自己改。
},
最后就可以发布到npm,通过npm使用自己的命令行翻译工具了。
具体如何发布到npm,可参考我的另一篇文章——如何将代码发布到npm