# lime-cli

> Simple CLI for scaffolding lime projects

Latest version **1.1.5** (published 2019-02-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install lime-cli
pnpm add lime-cli
yarn add lime-cli
bun add lime-cli
```

Provides the command `lime`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.5 |
| Published | 2019-02-28 |
| First published | 2019-02-26 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 23 |
| Unpacked size | 52 KB |
| Known vulnerabilities | 0 (+3 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 1 |
| Author | sheldoncui |
| Maintainers | cuiyongjian |
| Keywords | lime, limejs, lime.js, cli, frontend |

## Links

- npm: https://www.npmjs.com/package/lime-cli
- Repository: https://github.com/limejs/lime-cli
- Homepage: https://github.com/limejs/lime-cli#readme
- Issues: https://github.com/limejs/lime-cli/issues
- npm.io page: https://npm.io/package/lime-cli

## Dependencies (23)

- [co](https://npm.io/package/co.md) ^4.6.0
- [opn](https://npm.io/package/opn.md) ^5.4.0
- [ora](https://npm.io/package/ora.md) ^3.1.0
- [conf](https://npm.io/package/conf.md) ^2.0.0
- [async](https://npm.io/package/async.md) ^2.6.2
- [boxen](https://npm.io/package/boxen.md) ^3.0.0
- [chalk](https://npm.io/package/chalk.md) ^2.4.2
- [debug](https://npm.io/package/debug.md) ^4.1.0
- [yargs](https://npm.io/package/yargs.md) ^9.0.1
- [request](https://npm.io/package/request.md) ^2.88.0
- [shelljs](https://npm.io/package/shelljs.md) ^0.7.8
- [inquirer](https://npm.io/package/inquirer.md) ^6.2.2
- [cli-table](https://npm.io/package/cli-table.md) ^0.3.1
- [co-prompt](https://npm.io/package/co-prompt.md) ^1.0.0
- [commander](https://npm.io/package/commander.md) ^2.11.0
- [user-home](https://npm.io/package/user-home.md) ^2.0.0
- [handlebars](https://npm.io/package/handlebars.md) ^4.1.0
- [metalsmith](https://npm.io/package/metalsmith.md) ^2.3.0
- [multimatch](https://npm.io/package/multimatch.md) ^3.0.0
- [consolidate](https://npm.io/package/consolidate.md) ^0.15.1
- [git-url-parse](https://npm.io/package/git-url-parse.md) ^11.1.2
- [read-metadata](https://npm.io/package/read-metadata.md) ^1.0.0
- [download-git-repo](https://npm.io/package/download-git-repo.md) ^1.0.1

## Alternatives

- [@salesforce/cli](https://npm.io/package/@salesforce/cli.md) — 389.7K weekly downloads
- [@mintlify/cli](https://npm.io/package/@mintlify/cli.md) — 208.9K weekly downloads
- [@grafana/e2e-selectors](https://npm.io/package/@grafana/e2e-selectors.md) — 128.7K weekly downloads
- [mintlify](https://npm.io/package/mintlify.md) — 112.0K weekly downloads
- [@intlayer/cli](https://npm.io/package/@intlayer/cli.md) — 22.8K weekly downloads

## Recent versions

- 1.1.5 (latest) — 2019-02-28
- 1.1.4 — 2019-02-28
- 1.1.3 — 2019-02-28
- 1.1.2 — 2019-02-28
- 1.1.1 — 2019-02-28
- 1.1.0 — 2019-02-27
- 1.0.7 — 2019-02-27
- 1.0.6 — 2019-02-27
- 1.0.5 — 2019-02-27
- 1.0.4 — 2019-02-26
- 1.0.3 — 2019-02-26
- 1.0.2 — 2019-02-26
- 1.0.1 — 2019-02-26
- 1.0.0 — 2019-02-26

## README

![npm](https://img.shields.io/npm/v/lime-cli.svg) ![npm](https://img.shields.io/npm/dw/lime-cli.svg?label=lime-cli) ![npm](https://img.shields.io/npm/dw/@limejs/cli.svg?label=%40limejs%2Fcli) ![NPM](https://img.shields.io/npm/l/lime-cli.svg)


lime-cli
======

lime-cli是 [lime.js](https://github.com/limejs/lime) Web开发框架配套的项目管理工具，包含 项目初始化、项目模块创建等能力；同时具有灵活的 `子命令` 开发机制。

## 特性

* 初始化适配各种场景的 lime.js 项目, 快速启动开发.
* 灵活的插件机制，内置配置管理能力；快速开发自定义命令.
* 快捷创建 lime 框架模块，如 controller、model. [`developing`]

## 安装

``` bash
npm install lime-cli -g
# 或
npm install @limejs/cli -g
```

## 使用

lime-cli 默认支持的命令有:

```bash
lime init # 可交互的方式初始化 lime 项目脚手架
lime list # 查询并列出支持的 官方和私有项目模板
lime tpl # 增删私有项目模板
lime doc # 查看 lime-cli 帮助文档
lime config # 修改本地 lime-cli 的配置
lime new [controller|model|view] # 新建 controller 相关文件，*尚未支持*
lime plugin # 管理 lime 项目插件 *尚未支持*
```

### 初始化项目

目前官方提供的项目样板有:

* [[BASIC](https://github.com/limejs/lime-template-basic) 基于 [LIME.JS](//github.com/limejs/lime) 的项目基础项目模板，包含可选的基础 MVC 模块 [适合简单 demo]
* [[REST](https://github.com/limejs/lime-template-api)] 一个完善的 API 开发骨架，在基础模板之上，增强了 REST API 项目开发的能力，去除了不必要的视图层。[适合 restful api 项目]
* [[SPA](https://github.com/limejs/lime-template-spa)] 经典的基于 [Vue.js](https://cn.vuejs.org/) 的前后端分离的单页应用；分离开发，聚合部署 [适合内网管理端或没有SEO要求的外网产品]
* [[SSR](https://github.com/limejs/lime-template-ssr)] 基于 [Vue.js](https://cn.vuejs.org/) + [SSR](https://ssr.vuejs.org) 实现的完善的项目模板，支持开发环境热替换和生产环境的编译、部署 [适合对性能和SEO有要求的外网产品]

初始化一个项目只需使用 `lime init <project-foler>`

例如:

```bash
lime init my-project
```

其中 `my-project` 表示要把项目创建在哪个 目录 下，可以支持输入 `.` 表示当前所在目录。

执行上述命令，会交互式的选择所使用的 `项目模板`，然后发起模板所要求的交互提示。在完成交互后，项目会在你指定的 `my-project` 下生成所有项目样板文件。之后您可以进入项目目录，进行开发工作。

目前 lime-cli 支持官方提供的 4 个项目模板，如果你需要自己定制也非常简单，参考 [模板制作](./TEMPLATE.md) 指引来开发自己的私有模板。

### cli 本地配置

```bash
lime config set a=1 // 设置配置项a的值为1
```

你可以设置任意自己喜欢的配置，以备自己编写自定义命令插件时使用。当然，lime-cli 自身已经支持了一些可用的配置。

lime-cli 自身支持如下的配置项:

配置名   |   含义|默认值|示例
-----   |  ---  |----|---
self_cmd_dir|放置自定义子命令代码的目录|lime-cmd|"utils/mycmd"
templates_dir|远程模板的缓存目录|~/.lime-cli|"~/.lime"

你可以通过 `lime config list` 查看本地所有配置内容。 同时支持 `get <key>, set <key>` 的方式获取和设置单个 key。

### 制作私有模板

通常，你的团队可能会形成自己的项目样板。借助 lime-cli，你可以使用自己的样板来初始化项目。步骤如下:

1. 编写项目模板([教程](./TEMPLATE.md))，并托管到 github/bucket 等支持 git 协议的代码仓库平台
2. 通过 `lime tpl add <name> <url>` 命令将自己的私有模板添加到 lime-cli 的模板列表中

```bash
  lime tpl add mytpl myaccount/lime
```

其中 url 字段可以填写 github 的仓库短名称；如果不是 github 上的仓库，可以使用模板的完整的 URI 地址

## 自定义子命令

随着项目复杂度增加，可能需要编写一些命令来提高工作效率。lime-cli 支持编写自己的子命令，如实现一个 `lime drop` 命令。编写方式非常简单。现在假设你要编写一个 drop 子命令用来删除特定的页面文件，我们以此为例来说明步骤:

* 在当前项目根目录下创建一个目录 `lime-cmd`
* 在 lime-cmd 目录下创建一个子目录叫做 `drop`
* 在drop目录下新建一个 `index.js` 文件
* 按照规范编写子命令代码
* lime-cli 再次执行时，会自动加载当前工作目录(cwd)下的 `lime-cmd` 目录中的子命令

### 编写子命令代码

子命令js代码中只需导出一个 commander 所需的模块即可，对应字段的含义也可以去参考 `commander` 的官方文档。在这里我们简单介绍一下，足够你编写自己所需的命令功能。

```js
const rimrf = require('rimrf')

module.exports = {
    command: "drop",
    description: "删除项目的dist目录",
    help: () => {
        console.log('  例子:');
        console.log('');
        console.log('    $ lime drop');
        console.log();
    },
    options: [
      ['--f', '递归强制删除']
    ],
    action: () => {
        rimrf(path.join(process.cwd(), 'dist'))
        process.exit(0);
    }
};
```

其中

* command 表示子命令名字，格式跟 commander.command() 方法一致；
* description表示命令的描述，可在 `-h` 查看帮助时输出在顶部；
* `help` 会以 commander.on('help') 的方式挂载，可以给当前子命令追加自己喜欢的帮助信息；
* options表示配置选项，会以 commander.options() 的方式挂载，与 commander.options方法形参格式一致，第一个参数表示option指令，第二个参数表示参数描述
* action是commander命中后的回调，在这里可以编写你命令的主要逻辑


## TODO

支持更多类似 thinkjs 的模块添加命令

## Thanks

lime-cli 有参考 vue-cli, zan-node, think-cli, rato 等项目，在此对这些开源项目表示感谢

## License
MIT

---
_Source: https://npm.io/package/lime-cli · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
