- 概念
用于生成项目文件体系搭建和用户交互
交互式配置开发
vue init webpack demo-app
- 1.1下载模板
- 1.2提问
- 1.3元数据配置
vuecli 2.x
// bin/vue
//手册指引
const program = require('commander')
// 提供的api,也就是提示
// init , list, bulid, create
// logger
// chalk 高亮
// 结束编译 process.exit(1)
// 主文件 vue-init
const download = require('download-git-repo')
// 命令行处理工具
const program = require('commander')
// 检测路径是否存在
const exists = require('fs').existsSync
// 命令行加载效果
const ora = require('ora')
// 获取用户根目录
const home = require('user-home')
// / ~ ./ @ 绝对路径替换成波浪号
const tildify = require('tildify')
// 用户与脚本命令行交互
const inquirer = require('inquirer')
// rm -rf
const rm = require('rimraf').sync
// 统一打印机制
const logger = require('../lib/logger')
// 根据模板构建项目
const generate = require('../lib/generate')
// 检查当前脚手架
const checkVersion = require('../lib/check-verison')
// 告警
const warings = require('../lib/warnings')
// 路径处理
const localPath = require('../lib/local-path')
// 检测本地路径是否正确
const isLocalPath = localPath.isLocalPath
// 获取本地模板路径
const getTemplatePath = localPath.getTemplatePath
// 面试题: 如何使用本地离线下载好的模板或者自己预设的模板 --offline
// program --> 对应的command 用户输入的东西
let template = program.args[0] // 表示模板名称
// 判断是否有斜杠,其实是判断路径层级
const asSlash = template.indexOf('/') > -1
// 获取项目名称
const rawName = program.args[1]
// 判断是否为空或者输入· 就表示以当前目录为项目名称
const inPlace = !rawName || rawName == ""
// program.offline 判断用户参数是否包含--offline
// run()
// 确认本地路径是否存在
// generate.js
// 静态网页文件生成器
const metalsmith = require('metalsmith')
// 模板引擎
const Handlebars = require('handlebars')
// 多个条件匹配
const multimatch = require('multimatch')