您的位置:首页 > Web前端 > Node.js

Node CLI开发

2020-06-29 05:02 826 查看

第一阶段

  • 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命令就开发完成了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: