1.0.2 • Published 5 years ago

shares-cli v1.0.2

Weekly downloads
4
License
MIT
Repository
github
Last release
5 years ago

构建属于自己的CLI工具

前言

CLI,全称是command-line interface,也就是命令行交互接口。无论是在前端还是后端,都可以用于在构建时通过命令快速生成项目或模板等。例如前端的vue-cli(Vue前端开发脚手架),后端的dva-cli(Ant Design后端开发脚手架)等

需求

那么如何构建属于自己的CLI工具呢,在项目开发时可以快速生成自己需要的代码模板,去除重复工作,并且还可以为其他的开发者提供快速入门的使用呢?我们的具体需求如下:

1,通过执行命令,自动生成项目代码模板

2,项目代码模板可以自定义编辑

3,CLI可以通过软件包形式分发,其他开发者可以简单使用

整体架构

项目架构

这里模版的概念是指一个项目的样板,包含项目的完整结构和信息。模版的信息都存放在一个叫做templates.json的文件当中。用户可以通过命令行对templates.json进行添加、删除、罗列的操作。通过选择不同的模版,会自动从远程仓库把相应的模板拉取到本地,完成项目的搭建。

需要的依赖模块

package namedesclink
commander用于处理命令行相关工具https://github.com/tj/commander.js
download-git-repo用于下载git仓库https://github.com/flipxfx/download-git-repo
chalk处理终端信息显示的颜色https://github.com/chalk/chalk
inquirer交互终端,用于处理用户输入https://github.com/SBoudrias/Inquirer.js
ora终端loading解决方案https://github.com/sindresorhus/ora
shelljsshell 命令执行, 支持回调https://github.com/shelljs/shelljs
read-metadata用于读取json或者yaml元数据文件并返回一个对象https://www.npmjs.com/package/read-metadata
minimatch字符匹配工具https://github.com/isaacs/minimatch
semver版本号处理工具https://github.com/npm/node-semver
user-home用于获取用户的根目录https://github.com/sindresorhus/user-home
tildifyConvert an absolute path to a tilde path:/Users/sindresorhus/dev~/dev` | https://github.com/sindresorhus/tildify
rimrafA deep deletion module for node (likerm -rf)https://github.com/isaacs/rimraf
axios跨平台的ajax处理工具https://github.com/axios/axios
handlebars易于构建的模板引擎https://github.com/wycats/handlebars.js
metalsmithAn extremely simple, pluggable static site generator.https://github.com/segmentio/metalsmith
multimatch对 minimatch 的多字符串处理的扩展https://github.com/sindresorhus/multimatch
consolidate支持多种模板引擎的渲染https://github.com/tj/consolidate.js
async用于异步代码的高阶函数和通用模型https://github.com/caolan/async
validate-npm-package-name用于验证npm包https://github.com/npm/validate-npm-package-name
figletA FIG Driver written in JavaScript which aims to fully implement the FIGfont spec.https://github.com/patorjk/figlet.js

Quickstart

npm install -g shares-cli
# or
yarn global add shares-cli

// list available templete
shares list
// output usage information
shares list -h
// params: Template view under the specified warehouse
shares list -u aurorafe -p vue
// output usage information
shares init -h
// generate project
shares init shares-gis/maptalks-plugin-tpl-base project
// Defaults associated repository `aurorafe`, so, you can use
shares init vue-template-webpack project
// Use cached template
shares init --offline vue-template-webpack project
cd project
npm i
npm run dev

example

shares list vue // list vue project templete
shares list react // list react project templete
shares list library // list javascript library templete
shares list react-component // list react component templete
shares list vue-component // list vue component templete

// init
shares init vue-template-webpack project // repo
shares init aurorafe/vue-template-webpack project // user/repo
shares init --offline vue-template-webpack project // Use cached template
shares init -c direct:https://github.com/aurorafe/vue-template-webpack.git project // Use git clone ~ direct is important

Resource

vue & vue-component

// list
shares list vue // or
shares list -u vuejs-templates // list vue project templete
shares list vue-component // list vue component templete

// init
shares init vue-template-webpack project // repo
shares init aurorafe/vue-template-webpack project // user/repo
// or
shares init vuejs-templates/webpack project // or other template

// components template
shares init vue-component-template-webpack project // build your own component

react & react-component

shares list react // list react project template
shares list react-component // list react component templete

// init
shares init react-template-webpack project // repo
shares init aurorafe/react-template-webpack project // user/repo or other template

// components template
shares init react-component-template-ts project // build your own component

library (javascript library)

shares list library // list library template

// init build your own javascript library
shares init library-template-rollup project

Development

git clone https://github.com/liutaochange/shares-cli.git
cd shares-cli
npm link
shares -h