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命令就开发完成了。
相关文章推荐
- 开发Node CLI构建微信小程序脚手架的示例
- Android开发之旅:环境搭建及HelloWorld
- Android开发中如何结束所有的activity
- ios开发UI单视图控制器
- 结对开发-- 循环一维数组求和最大的子数组
- Android项目开发实战—倒计时[Handler,Timer,TimerTask,Message]
- 前端开发框架选型清单
- Appcan移动快速开发平台
- 并行开发 —— 第七篇 简要分析任务与线程池
- jQuery学习总结四 --- 功能性表格的开发
- 推荐一系列优秀的Android开发源码
- 极客Web前端开发资源大荟萃
- 平台开发思想
- 8年IT企业应用转web开发的心声
- 编程日记0124 php微博应用开发
- iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程(二)
- iOS开发网络篇 - 数据缓存
- 用MVVM模式开发中遇到的零散问题总结(3)——自制正则表达式万能绑定转换器
- X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一