这是本文档旧的修订版!
命令行
建立程序
首先初始化一個項目1) npm init
,在 package.json 中設定工具名稱
{ "name": "golden", "version": "1.0.0", "description": "數據管理以及金融分析工具", "main": "index.js", "author": "鎏金天涯", "license": "MIT" }
在本目錄下全局安裝 npm install -g
後即可使用 golden xxx
命令。
交互式命令行
首先安装commander.js:npm install commander
在 index.js 主文件中編輯個性化的命令,例:
const { program } = require('commander'); program.version(require('./package').version, '-v, --version', 'cli的最新版本'); program .command('scan') .option('-d, --day <day>', '指定日期,缺省则为上一个交易日。') .description('拉取全市场的股票价格,周期性任务') .action(async (options) => { let date = new Date(options.day) await db.InitConnection(0) await dm.UpdateMarketOfDate(isNaN(date.getTime()) ? 'last' : date, doconfirm) db.CloseConnection() })
* 具體使用方式請參照 api 工程以及 1) 文章。
刷新顯示
為了不讓console的輸出結果太長,需要清除臨時顯示的行,借助 readline.js 庫文件2) npm install readline
var readline = require('readline'); function ShowInfo(msg:string){ // process.stdout.clearLine(); // clear current text // process.stdout.cursorTo(0); readline.cursorTo(process.stdout, 0); process.stdout.write(msg); }
常用命令
- clearLine()
- cursorTo()
- moveCursor()
- clearScreenDown()
- createInterface()
- emitKeypressEvents()
交互工具
需要借助 inquire.js 3) 庫來實現命令交互。
安裝工具 npm install inquirer
後在js/ts文件中使用:
const inquirer = require('inquirer'); const promptList = [ // 具體交互內容 type: "list", message: "使用测试/生产环境?", name: "confirmTest", choices: ['测试环境', '生产环境'], default: this.IsTest ? '测试环境' : '生产环境' ] inquirer.prompt(promptList).then(answers => { // console.log(answers) // 返回的結果 }) var answers = await inquirer.prompt(promptList) this.IsTest = answers.confirmTest === '测试环境'
其它類型:
type: "confirm", default: true
參數
由于交互的问题种类不同,inquirer为每个问题提供很多参数:
- type:表示提问的类型,包括:input, confirm, list, rawlist, expand, checkbox, password, editor;
- name: 存储当前问题回答的变量;
- message:问题的描述;
- default:默认值;
- choices:列表选项,在某些type下可用,并且包含一个分隔符(separator);
- validate:对用户的回答进行校验;
- filter:对用户的回答进行过滤处理,返回处理后的值;
- transformer:对用户回答的显示效果进行处理(如:修改回答的字体或背景颜色),但不会影响最终的答案的内容;
- when:根据前面问题的回答,判断当前问题是否需要被回答;
- pageSize:修改某些type类型下的渲染行数;
- prefix:修改message默认前缀;
- suffix:修改message默认后缀。