zoukankan      html  css  js  c++  java
  • 使用blessed 开发丰富的cli 应用

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

    测试环境准备

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

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

    {
      "name": "blessed-project",
      "version": "1.0.0",
      "main": "index.js",
      "bin": "app.js",
      "license": "MIT",
      "dependencies": {
        "blessed": "^0.1.81"
      },
      "scripts": {
        "start": "node app",
        "build": "pkg ."
      },
      "pkg": {
        "scripts": "app.js"
      },
      "devDependencies": {
        "pkg": "^4.3.4"
      }
    }
    
    • app.js

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

    var blessed = require('blessed');
    
    // Create a screen object.
    var screen = blessed.screen({
      smartCSR: true
    });
    
    screen.title = 'blessed test';
    
    // Create a box perfectly centered horizontally and vertically.
    var box = blessed.box({
      top: 'center',
      left: 'center',
       '50%',
      height: '50%',
      content: 'hello blessed {bold}world{/bold}!',
      tags: true,
      border: {
        type: 'line'
      },
      style: {
        fg: 'white',
        bg: 'magenta',
        border: {
          fg: '#f0f0f0'
        },
        hover: {
          bg: 'green'
        }
      }
    });
    
    // Append our box to the screen.
    screen.append(box);
    
    // Add a png icon to the box
    var icon = blessed.image({
      parent: box,
      top: 0,
      left: 0,
      type: 'overlay',
       'shrink',
      height: 'shrink',
      file: __dirname + '/my-program-icon.png',
      search: false
    });
    
    // If our box is clicked, change the content.
    box.on('click', function(data) {
      box.setContent('{center}Some different {red-fg}content{/red-fg}.{/center}');
      screen.render();
    });
    
    // If box is focused, handle `enter`/`return` and give us some more content.
    box.key('enter', function(ch, key) {
      box.setContent('{right}Even different {black-fg}content{/black-fg}.{/right}
    ');
      box.setLine(1, 'bar');
      box.insertLine(1, 'foo');
      screen.render();
    });
    
    // Quit on Escape, q, or Control-C.
    screen.key(['escape', 'q', 'C-c'], function(ch, key) {
      return process.exit(0);
    });
    
    // Focus our element.
    box.focus();
    
    // Render the screen.
    screen.render();

    运行

    • 直接使用node
    node app
    or
    yarn start
    • 使用二进制文件

      pkg 打包的二进制文件

    yarn build 
    linux && mac
    ./blessed-project-{linux|mac}
    windows
    blessed-project-win.exe
    • 效果

    说明

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

  • 相关阅读:
    springBoot 2.1.5 pom 文件 unknown 错误
    @HystrixCommand 不能被导包
    SQL数据库连接语句
    ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法
    重载和重写的区别
    抽象类和接口的相同点和不同点
    结构详解
    简单工厂和抽象工厂的区别
    DataRead和DataSet的异同
    什么是Web Server
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9944955.html
Copyright © 2011-2022 走看看