# why-cli
**Repository Path**: why1235678/why-cli
## Basic Information
- **Project Name**: why-cli
- **Description**: 实现前端脚手架,了解脚手架其中的原理
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-12-07
- **Last Updated**: 2021-12-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 手写前端脚手架 why-cli
## 1.必备模块 npm 包
+ commander 命令行参数解析
+ inquirie 命令行交互工具,可以实现命令行的选择功能,输入功能
+ download-git-repo 从 github 下载模板
+ chalk 颜色
+ metalSmith 读取所有文件,实现模板渲染
+ consolidate 统一模板引擎
## 2.工程创建
### 2.1创建目录
* |--bin
* |--www //全局命令执行文件
* |--src
* |-- create.js // create 命令逻辑
* |-- config.js // config 命令逻辑
* |-- main.js // 入口文件
* |-- utils // 存放工具方法
### 2.2初始化项目
* 生成 pakeage.json
`npm init -y`
* pakeage.json 中设置命令
`"bin": {`
"why-cli": "./bin/www.js"
`}`
* www 文件中,使用node环境执行此文件,使用main作为入口文件
`#! /usr/bin/env node`
`require('../src/main.js)`
* 链接包到全局下使用
`npm link`
尝试在命令行执行 why-cli,cmd 窗口打印出结果
### 2.2 使用 eslint
* 安装 eslint
`cnpm i eslint --save-dev`
* 初始化 eslint 配置文件
`npx eslint --init`
### 2.3 使用 commander 获取版本号
* 安装 commander
`cnpm i commander --save-dev`
`
program
.command("create") // 命令名称
.alias("c") // 命令别名
.description("create a project") // 该命令的描述信息
.action(() => {
// 执行该命令的回调
console.log("create");
})
.parse();
`
`cnpm i axios --save-dev`
`cnpm i ora inquirer --save-dev`
`cnpm i download-git-repo --save-dev`
`cnpm i ncp --save-dev`
`cnpm i metalsmith --save-dev` 遍历所有的文件目录,编译模板,只要是模板渲染都需要
`cnpm i consolidate --save-dev` 返回渲染函数,统一了所有的模板引擎
`cnpm i ejs --save-dev`
`npm link` `npm unlink`
## 3.解析命令行参数
* 3.1
## 4.create命令
* 4.1
## 5.config命令
## 6.项目发布