脚手架的执行原理

71 阅读2分钟
记录个人学习文档

vue create test-project --force -r 淘宝源 (指令 + 命令 + options )

当执行以上命令的时候终端做了什么?

  1. 首先我们要 在全局的环境变量查找vue指令,查询办法 which vue
  2. 然后我们进入到对应的node环境中
  3. 这里目录我们主要查看bin和lib即可
  4. 进入到bin目录下即可看到vue指令,这时候我们通过ll指令查看当前目录,通过lr我们即可知道vue其实只是一个软链接,最终指向的是lib目录下node_modules/@vue/cli/bin/vue.js
  5. lib/node_modules(全局node_modules)目录含义:我们平时通过使用npm install -g安装好的全局包都会被放在这个目录下。进入到@vue下,下面还会有cli这个项目,这个项目即是我们使用vue命令的源文件代码,进入到bin目录下,有一个vue.js的文件
  6. 总结:终端解析vue命令并在全局环境中查找,找到后通过软链接链接到vue.js文件,通过nodejs执行vue.js文件,vue.js文件执行comman+optionsz

通过以上的步骤我们自己要如何开发一个脚手架呢?

  1. 开发npm项目,该项目中包含一个bin/vue.js文件,并将这个项目发布到npm
  2. 将npm项目安装到node/lib/node_modules
  3. 在nodejs的bin目录下配置vue的软连接指向lib/node_modules/@vue/cli/bin/vue.js,这样我们在执行vue的时候即可找到vue.js文件进行执行

为什么全局安装@vue/cli后使用的命令变成了vue?

  1. 翻阅以上5步,@vue/cli最终指向了vue.js文件但是其实他并没有决定最终的vue指令,我们可以打开@vue/cli下的package.json文件查看

全局安装@vue/cli 发生了什么?

  1. 将依赖下载到/lib/node_modules
  2. 配置软连接

为什么vue指向一个js文件后,我们却可以通过vue命令执行呢?

  1. 直接来到vue.js文件,我们可以看到它的头部有这么一句话 #!/usr/bin/env node这句话的代码含义是在全局环境变量中查找node环境并执行

开发流程

  1. 当我们想在我们新建的包中引入一个正在开发的包,又要避免频繁的publish正在开发的包需要怎么做?这时候需要将我们的包通过软链接(npm link)的形式发布到全局的node_modules包中,在新建的包中npm link developPackage,在package.json中手动加上dependencies,因为此时npm i是没有developPackage
  2. 借助npm publish可以发布developPackage,发布成功之后借助npm i 安装到依赖中使用,如果只是需要使用npm上的包,不需要本地包,借助npm unlink解除和本地developPackage的软连接