1、概念

脚手架本质是一个操作系统的客户端,它通过命令执行。
vue create vue-test-app -f
上面命令由3个部分组成:主命令:vue,command:create,command的param:vue-test-app ,-f是option的param表示创建一个vue项目,项目名称vue-test-app。
image.png

2、问题

1、为什么全局安装@vue/cli后提娜佳的命令为vue?
image.png
因为vue指向的实际是../lib/node_modules/@vue/cli/bin/vue.js
来到@vue/cli里面的package.json指定的。
image.png
2、全局安装@vue/cli时发生了什么?
先将@vue/cli安装到node_modules里面,下载后会解析这个包的package.son,当发现bin下面由vue:bin/vue.js的配置,回到node的bin目录下安装一个软连接:将vue指向到../lib/node_modules/@vue/cli/bin/vue.js。
image.png
3、执行vue命令时发生了什么?为什么vue指向一个js文件,我们却可以通过vue命令去执行它?
1、会寻找vue命令有没有被注册,注册了的话,会执行vue命令。
2、@vue/cli/bin/vue.js的源码中第一行代码:#!/usr/bin/env node 告诉操作系统进入/usr/bin/env 文件,在直接调用这个文件的时候,找到这个命令并执行。
image.png
如果在test.js中加入#!/usr/bin/env node ,那么三条命令等价
image.png
如果使用imooc代替执行./test.js
1、找到node环境变量
image.png
2、进入node.bin的目录,将test的地址执行软链接,并创建imook命令,并指向test的地址。
image.png
3、创建完毕后,会有一个imook的链接。
image.png
问题4:为什么不适用#!/usr/bin/node,而用#!/usr/bin/env node
#!/usr/bin/node 直接执行/usr/bin目录下的node
#!/usr/bin/env node 在环境变量中查找node
前者将路径固化,可能会在别的电脑上会导致路径找不到。
问题5:为什么说脚手架本质是操作系统的客户端?
因为脚手架执行依靠node命令,node是一个客户端,我们执行脚手架或者其他node命令时,仅仅是一个参数,仅仅是将参数注入到node中。
问题6:为何为node脚手架命令创建别名?
创建软连接,将命令链接到我们的文件上。

3、描述脚手架命令执行的全过程

image.png

3、开发流程

  • 创建npm项目
  • 创建脚手架入口文件,最上方添加#!/usr/bin/env node
  • 配置package.json,添加bin属性
  • 编写脚手架代码
  • 将脚手架发布到npm

    4、脚手架开发难点

    1、分包:将复杂的系统拆分成若干个模块
    2、多个命令注册:
    vue create
    vue add
    vue invoke
    3、参数解析
    例如 -V 、-sh等
    4、帮助文档
    -help
    5、命令交互、日志打印、命令行我呢见变色、网络通信、文件处理等信息