两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 |
it:node:命令行 [2021-11-28 16:43] – [readline] goldentianya | it:node:命令行 [2023-08-07 16:19] (当前版本) – [建立程序] goldentianya |
---|
| |
===== 建立程序 ===== | ===== 建立程序 ===== |
| |
| 准备:在服务器上安装 node.js 以及 npm |
| <code shell> |
| sudo apt install nodejs |
| sudo apt install npm |
| </code> |
| |
首先初始化一個項目((a>[[https://segmentfault.com/a/1190000039110450|Node.js-CLI开发工具]])) <color #ff7f27>''%%npm init%%''</color>,在 package.json 中設定工具名稱 | 首先初始化一個項目((a>[[https://segmentfault.com/a/1190000039110450|Node.js-CLI开发工具]])) <color #ff7f27>''%%npm init%%''</color>,在 package.json 中設定工具名稱 |
</code> | </code> |
| |
在本目錄下全局安裝 <color #ff7f27>''%%npm install -g%%''</color> 後即可使用 <color #ff7f27>''%%golden xxx%%''</color> 命令。 | 在本目錄下全局安裝 <color #ff7f27>''%%npm install -g%%''</color> 後即可使用 <color #ff7f27>''%%golden xxx%%''</color> 命令。 (因为在package.json中已经定义了bin的执行路径) |
| |
===== 交互式命令行 ===== | ===== 交互式命令行 ===== |
* emitKeypressEvents() | * emitKeypressEvents() |
| |
调用 <color #7092be>inquirer</color> 之后 readline 的上下箭头不显示历史记录,变成 <color #ff7f27>''%%⌃[[A%%''</color> 这样的字符串,修正这个错误需要调用 <color #ff7f27>''%%process.stdin.setRawMode( true ); %%''</color> 函数。 | **接受用户输入** |
| <code javascript> |
| this.RL = readline.createInterface({input: process.stdin, output: process.stdout, terminal: true}) |
| // 监听 line 事件 |
| this.RL.on('line', (line:string) => { |
| this.observer.next(line) |
| this.counter++ |
| this.RL.pause() |
| }) |
| // 外部等待输入 |
| this.RL.setPrompt(prompt); |
| this.RL.prompt(); |
| return new Promise((resolve, reject) => { |
| this.observer.subscribe((value:any) => { |
| resolve(value.trim()) |
| }); |
| }) |
| </code> |
| |
| 调用 <color #7092be>inquirer</color> 之后 readline 的上下箭头不显示历史记录,变成 <color #ff7f27>''%%⌃[[A%%''</color> 这样的乱码字符串,修正这个错误需要调用 <color #ff7f27>''%%process.stdin.setRawMode( true ); %%''</color> 函数。 |
====== 交互工具 ====== | ====== 交互工具 ====== |
| |
需要借助 inquire.js ((c>[[https://blog.csdn.net/qq_26733915/article/details/80461257|inquirer.js —— 一个用户与命令行交互的工具]])) 庫來實現命令交互。 | 需要借助 inquire.js ((c>[[https://blog.csdn.net/qq_26733915/article/details/80461257|inquirer.js —— 一个用户与命令行交互的工具]])) ((d>[[https://www.npmjs.com/package\//inquirer|Inquirer.js <em>''\//'']]))庫來實現命令交互。 |
| |
安裝工具 <color #ff7f27>''%%npm install inquirer%%''</color> 後在js/ts文件中使用: | 安裝工具 <color #ff7f27>''%%npm install inquirer%%''</color> 後在js/ts文件中使用: |