CLI简析
Command Line Interface,是一种通过命令行来在运行一些代码,来实现某些功能的工具或者应用,如我们前端开发的过程中使用到的,vue-cli,webpack等等,使用他们可以减少开发中的一些低级重复劳动,或者规范开发工作流,提高开发效率。
功能目标
1.newman create XXX:可实现命令行初始化项目,一键生成应用模版;
2.newman refresh :路由自动生成;
3.newman publish "./dist" : 上传打包在dist目录下的前端包到阿里云oss;
(当然也可以上传其他文件,此处需要开通阿里云oss服务)
开发步骤
1.初始化项目
npm init -y
2.package.json中设置bin入口文件
// package.json
{
"name": "newman-cli",
"version": "1.0.1",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"bin": {
"newman": "./bin/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"commander": "^4.0.1",
"download-git-repo": "^3.0.2",
"handlebars": "^4.5.3",
"ora": "^4.0.3"
}
}
// ./bin/index.js
#!/usr/bin/env node // 首行提示操作系统用node运行该文件
3.运行npm link
将当前应用入口连接到系统指定位置,使其可全局使用
4.业务功能开发
./bin/index.js 中的内容如下,通过commander实现不同命令调用不同的操作。
而如下的功能文章中不过多赘述,可以克隆GitHub代码来看:
git clone https://github.com/Amy-Tong126/newman-cli.git
-
创建项目:
就是通过download-git-repo去github上下载对应库的代码; -
生成路由功能:
就是读取当前src下的page文件夹下的组件,然后根据路由模版文件,通过handlebars库重新渲染生成路由配置文件; -
上传发布功能:
就是通过ali-oss的sdk实现上传本地文件;
#!/usr/bin/env node
const program = require("commander");
const { create, refresh, publish } = require("../lib/api");
program.version(require("../package").version)
console.log(process.argv)
// 创建项目
program
.command("create <name>")
.description("create your project")
.action(name => {
create(name);
})
// 刷新自动更新路由
program
.command('refresh')
.description('refresh routers...')
.action(refresh)
// 上传到oss
program
.command('publish <filePath>')
.description('upload assets to CDN and git commit && push')
.action((filePath) => {
console.log("上传包");
publish(filePath)
});
program.parse(process.argv);
5.发布到npm
1.先把之前淘宝镜像的地址重置回来;
2.登录npm
3.执行publish发布操作
4.重新设置淘宝镜像
要注意的是:在发布前你需要,注册npm账号,并且邮箱确认。
#!/usr/bin/env bash
npm config get registry # 检查仓库镜像库
npm config set registry=http://registry.npmjs.org
echo '请进⾏行行登录相关操作:'
npm login # 登陆
echo "-------publishing-------"
npm publish # 发布
npm config set registry=https://registry.npm.taobao.org # 设置为淘宝镜像 echo "发布完成"
exit
总结
灵感来源于近期业务上接触到一个cli工具,可以实现一键创建项目和发布项目。同时,最近整理nodejs学习资料,就自创了一个low版的cli,记录一下,也期望后续可以完善的更好。