# zo-biz-cli-jr

> ## 一、开发流程

Latest version **1.0.3** (published 2023-11-23) · ISC license · 0 weekly downloads

## Install

```sh
npm install zo-biz-cli-jr
pnpm add zo-biz-cli-jr
yarn add zo-biz-cli-jr
bun add zo-biz-cli-jr
```

Provides the command `zo-biz-jr`.

## 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.3 |
| Published | 2023-11-23 |
| First published | 2023-11-23 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Unpacked size | 13.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | jiangrui1994 |

## Links

- npm: https://www.npmjs.com/package/zo-biz-cli-jr
- npm.io page: https://npm.io/package/zo-biz-cli-jr

## Dependencies (5)

- [ora](https://npm.io/package/ora.md) ^5.4.1
- [chalk](https://npm.io/package/chalk.md) ^4.1.2
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.1.1
- [inquirer](https://npm.io/package/inquirer.md) ^7.3.3
- [commander](https://npm.io/package/commander.md) ^11.1.0

## Recent versions

- 1.0.3 (latest) — 2023-11-23
- 1.0.2 — 2023-11-23
- 1.0.1 — 2023-11-23
- 1.0.0 — 2023-11-23

## README

# 组件库脚手架工具开发

## 一、开发流程

1.  创建项目

```bash
# 创建文件夹并进入
mkdir zo-biz-cli && cd zo-biz-cli
# 初始化项目
npm init
```

2. 安装可能使用到的相关依赖

```bash
# 安装 commander 创建命令行界面工具
pnpm add commander --save
# 安装 chalk 命令行美化工具
pnpm add chalk --save
# 安装 inquirer 命令行交互工具
pnpm add inquirer --save
# 安装 ora 命令行loading工具
pnpm add ora --save
# 安装 fs-extra 文件操作工具
pnpm add fs-extra --save
```

3. 编写代码

- 创建`bin`目录

```bash
# 创建目录
mkdir bin && cd bin
# 创建文件
touch index.js
```

- `package.json`文件配置

```json
//添加指令 并配置指令代码路径
 "bin": {
    "zo-biz": "./bin/index.js"
  },
```

- `index.js`编码

```js
// 指明脚本的执行环境是 node
#!/usr/bin/env node

// 引入相关依赖
const program = require("commander");
const chalk = require("chalk");
const inquirer = require("inquirer");
const ora = require("ora");
const fs = require("fs-extra");

// 定义命令行参数
program.version("1.0.0");


// [] 非必填 <> 必填
// 添加copy指令（别名：c）
program
  .command(`copy [project-path]`)
  .alias("c")
  .description(`复制组件库到项目目录`)
  .action((projectPath) => {
    // 执行复制指令代码
    require("../lib/copy-lib").copySync(projectPath);
  });


// 添加install指令（别名：i）
program
  .command(`install`)
  .alias("i")
  .description(`安装组件库`)
  .action(() => {
    require("../lib/install-lib").installLib();
  });


// 添加update指令（别名：u）
program
  .command(`update`)
  .alias("u")
  .description(`更新组件库`)
  .action(() => {
    require("../lib/update-lib")();
  });
// 解析命令行参数
program.parse(process.argv);
```

4. 代码实现逻辑

### 安装

- 安装指令:
  ```bash
  zo-biz i
  # 或者
  zo-biz install
  ```
  该指令会调用`install-lib.js`方法，实现组件库的安装
- 实现流程
  - 判断组件库是否安装,如果安装询问用户是否重新安装
  - 没有安装或者同意重新安装，询问用户使用哪种方式安装（npm/pnpm/yarn）
  - 根据用户选择的安装方式，调用对应的安装方法 例如：执行`pnpm add zo-biz-lib`
  - 安装完成之后，询问用户是否需要复制组件库到项目中
  - 用户同意复制，执行复制指令

### 复制

- 复制指令:
  ```bash
  zo-biz c
  # 或者
  zo-biz copy
  ```
  该指令会调用`copy-lib.js`方法，实现组件库的复制
- 实现流程
  - 判断组件库是否安装,如果没有安装询问是否需要安装组件库
  - 如果用户执行命令时候没有传入路径，让用户填写复制的目标路径
  - 如果目标路径存在，询问用户是否需要覆盖目标路径下的文件
  - 用户同意复制，询问用户复制范围（全部复制/选择复制）
  - 用户选择**全部复制**，直接将整个组件复制到目标路径下
  - 用户选择**选择复制**，询问用户需要复制哪些组件
  - 用户选择需要复制的组件，将组件复制到目标路径下

### 更新

- 更新指令:
  ```bash
  zo-biz u
  # 或者
  zo-biz update
  ```
  该指令会调用`update-lib.js`方法，实现组件库的更新
- 实现流程
  - 判断组件库是否安装,如果没有安装,直接执行安装指令
  - 如果组件库存在，询问用户组件库的更新方式（仅更新组件库文件夹/更新组件库的包）
  - **仅更新组件库文件夹**，直接执行复制指令
  - **更新组件库的包**，直接执行安装指令

## 二、项目结构

注：这是一个基础的目录结构，只作为示例

```bash
├── bin
│   └── index.js
├── lib
│   ├── copy-lib.js
│   ├── install-lib.js
│   └── update-lib.js
├── package.json
└── README.md
```

## 三、使用文档

1. 全局安装`zo-biz-cli`

```bash
npm install -g zo-biz-cli
```

2.  查看帮助文档

```bash
zo-biz -h
# 或者
zo-biz --help
```

3. 安装组件库

```bash
zo-biz i
# 或者
zo-biz install
```

4. 复制组件库到项目中

```bash
# src为组件的复制目标目录  也可忽略
zo-biz c src
# 或者
zo-biz copy src
```

5. 更新组件库

```bash
zo-biz u
# 或者
zo-biz update
```

## 四、问题记录

1. node 环境无法获取 pnpm 依赖安装的包的真实路径

- 原因：pnpm 的安装路径是相对路径，无法获取到真实路径
- 解决方法: 通过`fs.realpath`方法获取 pnpm 包软链的真实地址

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