# tik-tool

> - 简化重复工作 - 统一开发习惯 - 为后面跟多自动化做支持

Latest version **1.0.0** (published 2018-06-08) · ISC license · 0 weekly downloads

## Install

```sh
npm install tik-tool
pnpm add tik-tool
yarn add tik-tool
bun add tik-tool
```

Provides the command `tik`.

## 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.0.0 |
| Published | 2018-06-08 |
| First published | 2018-06-08 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 24.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | lanhao_tik_com |

## Links

- npm: https://www.npmjs.com/package/tik-tool
- npm.io page: https://npm.io/package/tik-tool

## Dependencies (6)

- [yargs](https://npm.io/package/yargs.md) ^11.0.0
- [colors](https://npm.io/package/colors.md) ^1.2.4
- [dotenv](https://npm.io/package/dotenv.md) ^5.0.1
- [shelljs](https://npm.io/package/shelljs.md) ^0.8.1
- [xiaolan-ast](https://npm.io/package/xiaolan-ast.md) ^1.3.67
- [readline-sync](https://npm.io/package/readline-sync.md) ^1.4.9

## Recent versions

- 1.0.0 (latest) — 2018-06-08

## README

### tik 命令行工具 出发点

- 简化重复工作
- 统一开发习惯
- 为后面跟多自动化做支持

### 通过命令行工具初始化项目
	
> tik create xxx

会根据提前准备好的模板创建目录，后续大家可以一起维护这个模板	
### 仪式感的更新版本号

> tik release 

选择更是的尺度是 `patch`,`feature`,`major`

### 生成容器运行管理相关的配置文件

> tik ci

这个会生成

`docker-compose.yml`, 容器相关

`rancher-compose.yml`, 编排相关

`build`, 镜像构建脚本

`upgrade` 服务升级脚本

此处可以提问

后续会继续完善做到完全自动发布。

### 项目模板的改造关键点

- env代替config

> 开发本地使用dotenv来进行配置，
>
>  打包运行后依赖容器的环境变量
> 
> 这样可以使代码更加“无状态”，配置管理更方便
> 
> 所以要求代码中有用到外部变量的都使用 process.env.XXX 方式

- /midlerwares  通用型中间件

	- cors 
	- error_handler

	> 兜底所有没有被catch的错误，建议业务上面尽量定义完整错误列表，此处只处理未定义的错误
	
	- traceId 
	
	> 串联上下游调用关系，后续日志统一收集后可以很好追踪链路
	
- /utils 通用型工具箱

	- common_field
	
	> Mongoose 插件式公共字段，在定义schema的地方使用
	
	- logger log4js
	
	> 避免使用console.log, 会阻塞
	>
	> 因为在app.js里已经挂到global
	>
	> 因此可以直接使用 log.info, log.warn, log.error, 日志信息会通过stream输出到指定文件
	
	
	- mongo
	
	> 一般不会引用，只会在 app.js 引用一次创建链接
	
	- redis
	
	> 只返回一个连接成功的 promise 化的redis-client,
	>
	> 如果需要针对业务特点进行封装，请在src里自行设计，此处不限制太多。
	
	- response
	
	> **重点！** 定义了success和error两个方法，
	>
	> 但是不提倡用中间件注册到ctx，
  >
	> 一来ctx每次会被销毁，二来希望统一一种方式处理返回
	>
	> 所以controller内部引入这个模块，使用 success / error处理结果。
	>
	> 使用 response.error 的时候不需要 单独 记录。

- test 测试

> 主体架构是 ava + superkoa(supertest)
> 
> 测试样例已经提供，可以照着写
> 
> package.json 已经写好，直接运行`npm test`即可

- src 业务相关的代码

	- /src/router.js
	
	> 这个文件不需要更改，请勿改动。
	>
	> 它会自动读取内层的 router 注册到 app
	
	- /src/{module}/v1 具体的业务逻辑集合
	
	> {module}主要是方便在一个系统内部在逻辑上归纳出几个部分，更多的时候因为服务拆分得足够小，只会有一两个module
	>
 	> 版本：这个 v1,v2 只是方便临时出现多版本兼容。常规来说应该在集群里启动不同版本的实例，通过反向代理实现多版本。 **重点**
	
	- /src/{module}/v1
	
	> 相对来说这层是业务强相关的，但还是提供了一点点约束
	>
	> controllers, middlewares,models,router.js 这些望文生义很好理解，简单看一下初始化的样例代码。
	>
	> 需要特别提醒一下，区别于最外面的middlewares，这一层的更偏重于具体业务。
	
	
	- error.js 是一个需要统一思路的环节。
	
	> 请参考样例代码来定义错误，这样可以在直接`throw`的时候有更好的统一处理。
	>
	> 错误码的规则，XXXYYY, 3位http语义分类，3位错误序列。调用方收到的是10位错误码，因为最前面还会加 4位 APPID
	>
	> 如 
	>
	> 1001404001 USER_NOT_FOUND
	>
	> 1001500002 INTERNAL_ERROR_2

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