脚手架
# 脚手架
# 脚手架执行流程
# 基本概念
环境变量
软链接
vue、which、env、node都是脚手架
# 脚手架执行原理
- 在终端输入vue create vue-test-app
- 终端解析出vue 命令
- 终端在环境变量中找到 vue 命令
- 终端根据 vue 命令链接到实际文件 vue.js
- 终端利用node 执行 vue.js
- vue.js解析 command /options
- vue.js执行 command
- 执行完毕,退出执行
# 脚手架开发入门
创建npm项目
创建脚手架入口文件,最上方添加:
#!/usr/bin/env node
配置 package.json, 添加bin属性
编写脚手架代码
将脚手架发布到npm
# imooc-ls文件浏览器开发
创建npm项目配置bin文件
使用npm的npm link命令,即可在终端输入bin下的键名执行对应键值里的js文件
# Unix文件权限体系
文件夹bin: d rwx r-x r-x
package.json: - rw- r-- r--
第一个字母表示文件类型,后面以三个为一组,各组名称为ugo,每一组由rwx组成
r:可访问、w:可编辑、x:可执行
u:当前登录用户权限、g:当前登录用户所在分组、o:其他用户
# Unix使用32位二进制数存储文件类型和权限
0000(文件类型)000(特殊权限)000(用户权限)000(分组权限)000(其他权限)
# 自动化测试
使用mocha进行测试
# 脚手架框架搭建
commander
{Program}
{subcommand}
实现命令行参数分割【官方案例】
# commander options基础特性
option的四种定义方式
- -s 80
- -s80
- --separator 80
- --separator=80
# commander options高级特性
参数连写。
[letters...] 三个.表示可传入数组。使用--表示截断数组的输入。
addOption()以及new Option(),给参数进行更多的配置。
自定义option
# command基本用法
使用commander下的异常类进行抛错
# Argument高级用法
new Argument()
addArgument()
hook() 'preAction' 在Action执行前执行
'postAction'在Action执行后执行
# node版本校验
# 开启子进程
# 子进程通信
# 端口冲突检测 detect-port
# nodejs的net库
使用net进行socket连接与通信
# Inquirer.js 命令行交互界面
使用各种类型的question
当配置文件被修改时,重新启动问答服务
# npmlog
按顺序加载模块,需要在加载前修改好日志的配置才会有效
# 注册Hooks
如何在json中写hooks?
可以写模块的文件名,进行加载。
# 触发Hooks
# 模块加载
直接加载js、mjs文件。根据路径加载文件。
# 注册插件
依赖于条件判断
数组
整体是个function