blessed 是一个不错的npm 包,可以帮助我们开发出带有丰富ui界面的cli 应用,类似的有subzero

测试环境准备

  • 项目结构
  1. ├── README.md
  2. ├── app.js
  3. ├── my-program-icon.png
  4. ├── package.json
  5. └── yarn.lock
  • package.json 说明

    主要是依赖以及打包npm 的配置

  1. {
  2. "name": "blessed-project",
  3. "version": "1.0.0",
  4. "main": "index.js",
  5. "bin": "app.js",
  6. "license": "MIT",
  7. "dependencies": {
  8. "blessed": "^0.1.81"
  9. },
  10. "scripts": {
  11. "start": "node app",
  12. "build": "pkg ."
  13. },
  14. "pkg": {
  15. "scripts": "app.js"
  16. },
  17. "devDependencies": {
  18. "pkg": "^4.3.4"
  19. }
  20. }
  • app.js

    简单的cli 开发代码,来自官方文档

  1. var blessed = require('blessed');
  2. // Create a screen object.
  3. var screen = blessed.screen({
  4. smartCSR: true
  5. });
  6. screen.title = 'blessed test';
  7. // Create a box perfectly centered horizontally and vertically.
  8. var box = blessed.box({
  9. top: 'center',
  10. left: 'center',
  11. width: '50%',
  12. height: '50%',
  13. content: 'hello blessed {bold}world{/bold}!',
  14. tags: true,
  15. border: {
  16. type: 'line'
  17. },
  18. style: {
  19. fg: 'white',
  20. bg: 'magenta',
  21. border: {
  22. fg: '#f0f0f0'
  23. },
  24. hover: {
  25. bg: 'green'
  26. }
  27. }
  28. });
  29. // Append our box to the screen.
  30. screen.append(box);
  31. // Add a png icon to the box
  32. var icon = blessed.image({
  33. parent: box,
  34. top: 0,
  35. left: 0,
  36. type: 'overlay',
  37. width: 'shrink',
  38. height: 'shrink',
  39. file: __dirname + '/my-program-icon.png',
  40. search: false
  41. });
  42. // If our box is clicked, change the content.
  43. box.on('click', function(data) {
  44. box.setContent('{center}Some different {red-fg}content{/red-fg}.{/center}');
  45. screen.render();
  46. });
  47. // If box is focused, handle `enter`/`return` and give us some more content.
  48. box.key('enter', function(ch, key) {
  49. box.setContent('{right}Even different {black-fg}content{/black-fg}.{/right}\n');
  50. box.setLine(1, 'bar');
  51. box.insertLine(1, 'foo');
  52. screen.render();
  53. });
  54. // Quit on Escape, q, or Control-C.
  55. screen.key(['escape', 'q', 'C-c'], function(ch, key) {
  56. return process.exit(0);
  57. });
  58. // Focus our element.
  59. box.focus();
  60. // Render the screen.
  61. screen.render();

运行

  • 直接使用node
  1. node app
  2. or
  3. yarn start
  • 使用二进制文件

    pkg 打包的二进制文件

  1. yarn build
  2. linux && mac
  3. ./blessed-project-{linux|mac}
  4. windows
  5. blessed-project-win.exe
  • 效果

说明

使用blessed 我们可以开发出支持丰富界面的cli工具,集成oclif 很更强大,同时也有一个直接可以使用vue react 的插件,这样开发就更简单了

 
 
 
 

使用blessed 开发丰富的cli 应用的更多相关文章

  1. 如何用node开发自己的cli工具

    如何用node开发自己的cli工具 灵感 写这个工具的灵感以及场景源于youtube的一次闲聊 github 地址 blog首发 使用场景 原本我们写博客展示shell,例如:安装运转docker,一 ...

  2. Ink——一款使用React风格开发命令行界面应用(CLI App)的nodejs工具

    Github: https://github.com/vadimdemedes/ink Ink introduction: React for CLIs. Build and test your CL ...

  3. atitit.基于  Commons CLI 的命令行原理与 开发

    atitit.基于  Commons CLI 的命令行原理与 开发 1. 命令行支持的格式有以下几种: 1 2. json化,map化的命令行参数内部表示 1 3. Ati cli 2 4. CLI库 ...

  4. APICloud提供适用于命令行的开发工具,开发更具极客精神!

    APICloud近期大动作不断,上周刚刚支持Atom编辑器,并推出核心开发工具库.本周又为开发者提供了一款超轻便的新开发工具--CLI工具! 操作系统: Mac/Windows/Linux nodej ...

  5. 轻松掌握VS Code开发.Net Core及创建Xunit单元测试

    前言 本篇文章主要还是介绍使用 VS Code 进行.Net Core开发和常用 CLI命令的使用,至于为啥要用VS Code ,因为它是真的是好看又好用 :) ,哈哈,主要还是为了跨平台开发做准备. ...

  6. click python cli 开发包

    python click 包是一个方便的cli 开发包,我们可以用来开发强大的cli 应用 使用venv 进行环境准备,示例代码来自官方 venv 环境准备 python3 -m venv demoa ...

  7. ubuntu 18.04安装clojure工程的cli工具lein

    官网的安装过程https://leiningen.org/#install 是文字描述,并不够lazy. 我仿照code,chrome nodejs的方式,给出下面的命令行安装过程 wget http ...

  8. 使用阿里云cli管理安全组

    相比于python SDK方式,阿里云基于GO SDK开发了一整套CLI工具,可以通过调用RPC API来管理云资源,对编程能力不够的人来说是个福音. 而且,阿里云CLI的文档比SDK的文档更加全面, ...

  9. vorpal 又一个方便的cli 开发包

    vorpal 是一个npm 包,我们可以用来开发专业的cli 程序 简单使用 初始化项目 yarn init -y 添加依赖 yarn add vorpal 简单demo app.js // cons ...

随机推荐

  1. iterm2用法与技巧

      1.设置窗口 定位到 [Preferences - Profiles - Window] 新窗口设定风格设为 [Top of Screen],这样每次新打开终端都会固定出现在屏幕的顶端且不会有窗口 ...

  2. Android出现declaration of org.apache.http.message.BasicLineFormatter appears in /system/framework/

    这是由于使用了CloseableHttpClient造成的,把 CloseableHttpClient httpclient = HttpClients.createDefault(); Closea ...

  3. 44 CSS 浮动 模态框 定位

    一.浮动 float : 浮动的盒子不占原来的位置,其下方的盒子会上移 父盒子会发生塌陷现象.同一级盒子right浮动,同级左边的盒子需要左浮动,right浮动的盒子才能上来 由于浮动框不在文档的普通 ...

  4. ssh: connect to host 192.168.11.180 port 22: Connection refused

    错误原因: 1.sshd 未安装:sudo apt-get install openssh-server 2.sshd 未启动:sudo net start sshd 3.防火墙:sudo ufw d ...

  5. Oracle性能诊断艺术-读书笔记(执行计划中显示 Starts, E-Rows, REM A-Rows and A-Time)等)

    必须以 ' runstats_last '的方式查看执行计划哦! 操作一 hint  /*+ gather_plan_statistics */  : /* 添加 hint   /*+ gather_ ...

  6. 深入理解$watch ,$apply 和 $digest --- 理解数据绑定过程——续

    Angular什么时候不会自动为我们$apply呢? 这是Angular新手共同的痛处.为什么我的jQuery不会更新我绑定的东西呢?因为jQuery没有调用$apply,事件没有进入angular ...

  7. spark 任务运行原理

    调优概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以 ...

  8. Java多线程的同步控制记录

    Java多线程的同步控制记录 一.重入锁 重入锁完全可以代替 synchronized 关键字.在JDK 1.5 早期版本,重入锁的性能优于 synchronized.JDK 1.6 开始,对于 sy ...

  9. 若所有的参数皆需要类型转换——请为此采用non-member函数

    若所有的参数皆需要类型转换--请为此采用non-member函数 经常使用C++的程序猿(希望更多的程序媛),一般不会同意让classes支持类型转换,至于为什么,请看后续的博客.假如我们设计一个表示 ...

  10. 传递数据后创建后台service来处理事件!

    package com.lixu.service; import android.app.Service; import android.content.Intent; import android. ...