# chuncli

> a tool

Latest version **1.2.0** (published 2023-07-06) · ISC license · 0 weekly downloads

## Install

```sh
npm install chuncli
pnpm add chuncli
yarn add chuncli
bun add chuncli
```

Provides the command `chcli`.

## 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.2.0 |
| Published | 2023-07-06 |
| First published | 2023-06-25 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=16.11.0 |
| Dependencies | 35 |
| Unpacked size | 34.3 KB |
| Known vulnerabilities | 0 (+7 in 2 direct dependencies) |
| Install scripts | no |
| Author | chunhao |
| Maintainers | chunhao |
| Keywords | chuncli |

## Links

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

## Dependencies (35)

- [ora](https://npm.io/package/ora.md) ^5.4.1
- [vue](https://npm.io/package/vue.md) ^3.3.4
- [chalk](https://npm.io/package/chalk.md) ^4.1.2
- [husky](https://npm.io/package/husky.md) ^8.0.0
- [figlet](https://npm.io/package/figlet.md) ^1.6.0
- [npmlog](https://npm.io/package/npmlog.md) ^7.0.1
- [semver](https://npm.io/package/semver.md) ^7.5.2
- [webpack](https://npm.io/package/webpack.md) ^5.0.0
- [chokidar](https://npm.io/package/chokidar.md) ^3.5.3
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.1.1
- [inquirer](https://npm.io/package/inquirer.md) ^8.2.5
- [prettier](https://npm.io/package/prettier.md) ^2.8.8
- [readline](https://npm.io/package/readline.md) ^1.3.0
- [commander](https://npm.io/package/commander.md) ^11.0.0
- [fast-glob](https://npm.io/package/fast-glob.md) ^3.2.12
- [git-clone](https://npm.io/package/git-clone.md) ^0.2.0
- [commitizen](https://npm.io/package/commitizen.md) ^4.3.0
- [didyoumean](https://npm.io/package/didyoumean.md) ^1.2.2
- [vue-loader](https://npm.io/package/vue-loader.md) ^17.2.2
- [detect-port](https://npm.io/package/detect-port.md) ^1.5.1
- [lint-staged](https://npm.io/package/lint-staged.md) ^13.2.2
- [webpack-chain](https://npm.io/package/webpack-chain.md) ^6.5.1
- [webpack-merge](https://npm.io/package/webpack-merge.md) ^5.9.0
- [@commitlint/cli](https://npm.io/package/@commitlint/cli.md) ^8.2.0
- [download-git-repo](https://npm.io/package/download-git-repo.md) ^0.0.2
- [webpack-dev-server](https://npm.io/package/webpack-dev-server.md) ^4.15.1
- [copy-webpack-plugin](https://npm.io/package/copy-webpack-plugin.md) ^11.0.0
- [html-webpack-plugin](https://npm.io/package/html-webpack-plugin.md) ^5.5.3
- [clean-webpack-plugin](https://npm.io/package/clean-webpack-plugin.md) ^4.0.0
- [terser-webpack-plugin](https://npm.io/package/terser-webpack-plugin.md) ^5.3.9
- [conventional-changelog](https://npm.io/package/conventional-changelog.md) ^4.0.0
- [interpolate-html-plugin](https://npm.io/package/interpolate-html-plugin.md) ^4.0.0
- [validate-npm-package-name](https://npm.io/package/validate-npm-package-name.md) ^5.0.0
- [css-minimizer-webpack-plugin](https://npm.io/package/css-minimizer-webpack-plugin.md) ^5.0.1
- [@commitlint/config-conventional](https://npm.io/package/@commitlint/config-conventional.md) ^17.6.6

## Recent versions

- 1.2.0 (latest) — 2023-07-06
- 1.0.3 — 2023-06-26
- 1.0.2 — 2023-06-25
- 1.0.1 — 2023-06-25
- 1.0.0 — 2023-06-25

## README

## CHCLI

一个脚手架

## 安装

```js
npm install -g chuncli
```

## 使用

项目提供了 **create**、 **start**、 **build** 三个命令

### create 创建一个项目

```js
chcli create [options] <templateName> <projectName>
```

- templateName: vue | react
- projectName: 创建的项目名称
- options: -f | --force 当前目录存在同名文件夹时覆盖

### start 启动项目

```js
chcli create [options]
```

#### options 可选项:

1.  -D | --debug  
    开启 debug 模式，可以看到更多打印信息
2.  -C | --config <配置文件路径>
    - 指定配置文件，不传入会查找项目内 **chun.config.(js|json|mjs)**
    - 当存在多个优先级**js>json>mjs**
    - 会对该配置文件监听，当有修改时会自动重启项目
3.  -P | --port <端口号>  
    指定端口号，默认使用**8080**，当端口不可用会使用新的可用端口
4.  -T | --type <启动项目类型>  
    可传入**vue|react**，不传默认为 **vue**

#### 关于配置文件

```js
module.exports = {
  defineConfig: {...},
  hooks: [...],
  plugins: [...]
}
```

- defineConfig: webpack 相关配置  
  格式同 webpack 配置
- hooks: chcli 钩子

```js
module.exports = {
  hooks: [
    ['registed', function (context) {}], // [触发阶段, 回调函数]
    ['registed', '../xx/xx.js'], // [触发阶段, 要执行的 js 文件路径]
    ['registed', 'saaa.js'], // [触发阶段, 要执行的 node_modules 中文件]
    ['xx', 'xx'] // 自定义hook，可以配合插件使用
  ]
}
// 触发阶段可选
// 1. registed: 解析完hooks后立即执行
// 2. unStarted: 启动之前
// 3. started: 启动完成后
```

- plugin: chcli 插件

```js
module.exports = {
  plugins: [
    'pluginName', // node_modules 中插件
    './pluginName', // 项目内插件
    function () {} // 直接写回调
  ]
}
```

如果要传参数

```js
module.exports = {
  plugins: [['pluginName', { a: 1 }]]
}
```

插件默认参数

```js
module.exports = {
  plugins: [['./testPligin.js', { a: 1 }]]
}

// testPligin.js
module.exports = function (API, params) {
  console.log(params) // { a: 1 }
  const { getWebpackConfig, getVal, setVal, emitHooks } = API
  // getWebpackConfig: ()=> WebpackChain, 返回一个WebpackChain的实例，可以链式修改webpack配置
  // getVal: (key:string)=> any 获取之前插件设置的内容
  // setVal: (key:string, value: any)=> void 设置一个属性，后续插件可以使用
  // emitHooks: (key: string)=> void 手动触发一类hook，可以配合自定义hook使用
}
```

插件会在执行完 registed hook 后依次执行

#### 最终传入 webpack 的配置文件

项目内置了 vue 和 react 的一些基础配置，同时可以从配置文件传入和插件传入，最终执行时会进行合并

```js
merge(当前启动类型的基础配置, 配置文件中传入的配置, 插件修改的配置)
// 后面覆盖前面
```

### build 项目打包

```js
chcli create [options]
```

#### options 可选项:

1.  -C | --config <配置文件路径>
    - 指定配置文件，不传入会查找项目内 **chun.config.(js|json|mjs)**
    - 当存在多个优先级**js>json>mjs**
    - 会对该配置文件监听，当有修改时会自动重启项目
2.  -T | --type <启动项目类型>  
    可传入**vue|react**，不传默认为 **vue**

配置文件最终执行情况同 start

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