Node CLI开发

第一阶段

  • npm init 生成package.json配置文件

  • 在package.json中添加bin配置项 (bin对象的属性就是命令的名称,属性值就是入口文件)

    {
      "name": "simple-cli",
      "version": "1.0.0",
      "description": "a simple node cli",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "shipeng",
      "license": "ISC",
      "bin":{
        "simple-cli": "index.js"
      }
    }
    

第二阶段

  • 在index.js文件首部写如下命令:

     #!/usr/bin/env node                              这是告诉系统,下面的脚本用node执行
    
  • 编写CLI命令实体

     使用commander.js编写命令配置,如下:
    
    #!/usr/bin/env node
    const program = require('commander')
    const inquirer = require('inquirer')
    const chalk = require('chalk')
    
    program
        .command('module [moduleName]')
        .alias('m')
        .description('创建新的项目')
        .option('-a, --name [moduleName]', '模块名称')
        .action(option => {
            console.log('Hello World')
        })
        .on('--help', function() {
            console.log('  Examples:')
            console.log('')
            console.log('$ app module moduleName')
            console.log('$ app m moduleName')
        })
        
    program.parse(process.argv)
    
  • 当需要和用户交互时使用inquirer.js创建交互

    #! /usr/bin/env node 
    
    const program = require('commander')
    const inquirer = require('inquirer')
    const _ = require('lodash')
    const chalk = require('chalk')
    
    program
        .command('module')
        .alias('m')
        .description('创建新的模块')
        .option('--name [moduleName]')
        .option('--sass', '启用sass')
        .action(option => {
            var config = _.assign({
                moduleName: null,
                description: '',
                sass: false,
                less: false
            }, option)
            var promps = []
            
            console.log('')
            console.log(chalk.blue('are you ok?'))     
            console.log('')
            
            if(config.moduleName !== 'string') {
                  promps.push({
                    type: 'input',
                    name: 'moduleName',
                    message: '请输入模块名称',
                    validate: function (input){
                        if(!input) {
                            return '不能为空'
                        }
                        return true
                    }
                  })
            } 
    
            if(config.description !== 'string') {
                promps.push({
                    type: 'input',
                    name: 'moduleDescription',
                    message: '请输入模块描述'
                })
            }
    
            if(config.sass === false) {
              promps.push({
                type: 'list',
                name: 'cssPretreatment',
                message: '请选择css预处理器',
                choices: [
                  {
                    name: 'Sass/Compass',
                    value: 'sass'
                  }
                ]
              })
            }
    
            inquirer.prompt(promps).then(function (answers) {
                console.log(chalk.green('项目创建完成'))
                console.log(chalk.blue(answers))
            })
        }) 
        .on('--help', function() {
            console.log('  Examples:')
            console.log('')
            console.log('$ app module moduleName')
            console.log('$ app m moduleName')
        })
    
    program.parse(process.argv)
    

第三阶段

在当前目录下执行 npm link,将当前的代码在npm全局目录下生产快捷方式,npm检测到package.json文件里有bin字段,就同时在npm全局目录下生成了cmd命令。这样一个简单的cli命令就开发完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值