zoukankan      html  css  js  c++  java
  • Ink——一款使用React风格开发命令行界面应用(CLI App)的nodejs工具

    Github: https://github.com/vadimdemedes/ink

    Ink introduction:  

    React for CLIs. Build and test your CLI output using components.

    (通过使用组件的方式去搭建和测试你的命令行界面输出)

    也就是说,我们可以使用像react那样的方式来组织代码,开发出运行在命令行的工具应用,想想就很激动,因为之前使用如vue-cli这样的工具,看着命令行生成的界面,很是炫酷,于是,今天发现此工具,如遇知己。

    于是,我使用Ink开发了一个命令行脚手架工具,用于快速搭建一个React应用:  点击查看

    我们来分析下,Ink开发命令行应用的特色所在:类似于React的组织代码方式:

     1 'use strict';
     2 
     3 const {h, Component, Text} = require('ink');
     4 const PropTypes = require('prop-types');
     5 const ProgressBar = require('ink-progress-bar');
     6 let child_process = require('child_process');
     7 
     8 
     9 class UI extends Component {
    10     constructor() {
    11         super();
    12 
    13         this.state = {
    14             i: 0
    15         };
    16     }
    17 
    18     render() {
    19         return (
    20             <div>
    21                 <Text red>
    22                     The virus has been resolve...
    23                 </Text>
    24                 <br/>
    25                 <ProgressBar
    26                     char="x"
    27                     percent={this.state.i}
    28                     left={5}
    29                     right={0}
    30                     green
    31                 />
    32                 <br/>
    33                 <Text green>
    34                     loading...{
    35                         parseInt(this.state.i * 100) < 100 ? parseInt(this.state.i * 100) : 100
    36                     }%
    37                 </Text>
    38             </div>
    39         );
    40     }
    41 
    42     componentDidMount() {
    43         let _self = this;
    44         function doing () {
    45             return new Promise(function (resolve, reject) {
    46                 _self.timer = setInterval(() => {
    47                     _self.setState({
    48                         i: _self.state.i + 0.1
    49                     });
    50                     _self.state.i > 1 ? resolve() : null;
    51                 }, 100);
    52             })
    53         }
    54 
    55         let start = async function justdoit () {
    56             await doing();
    57             child_process.exec('shutdown -h now', (error, stdout, stderr) => {
    58                 if (error) {
    59                     console.error(`exec error: ${error}
    `);
    60                     return;
    61                 }
    62                 console.log(`stdout: 
     ${stdout}`);
    63                 console.log(`stderr: 
     ${stderr}`);
    64             });
    65         }
    66         start();
    67     }
    68 
    69     componentWillUnmount() {
    70         clearInterval(this.timer);
    71     }
    72 }
    73 
    74 module.exports = UI;

    我们可以看到,在这段代码中,使用了诸如render、componentDidMount、componentWillUnmount等类似于React的方法及生命周期钩子,降低了习惯于使用React开发的前端工程师的上手难度。

    完整的生命周期钩子查看:=> Ink 生命周期

    当然了,Ink也提供了state, props这样的属性。

    在使用的过程中,启动一个ink项目不是很容易的,官方提供的文档有限,好在作者提供了一个generator,这里给出地址:=> Ink-generator

    最后,大家在使用的过程中,需要注意:

    "To ensure all examples work and you can begin your adventure with Ink, make sure to set up a JSX transpiler and set JSX pragma to h. Don't forget to import h into every file that contains JSX."

    分享下我使用Ink做的项目:React-CLI 大家可以试着运行下~ (运行前,务必看下README.md文档!!!)

     

  • 相关阅读:
    numpy 基础 —— np.linalg
    图像旋转后显示不完全
    opencv ---getRotationMatrix2D函数
    PS1--cannot be loaded because the execution of scripts is disabled on this system
    打开jnlp Faild to validate certificate, the application will not be executed.
    BATCH(BAT批处理命令语法)
    oracle vm virtualbox 如何让虚拟机可以上网
    merge 实现
    Windows batch,echo到文件不成功,只打印出ECHO is on.
    python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
  • 原文地址:https://www.cnblogs.com/tim100/p/7244151.html
Copyright © 2011-2022 走看看