记录个人学习文档
vue create test-project --force -r 淘宝源 (指令 + 命令 + options )
当执行以上命令的时候终端做了什么?
- 首先我们要 在全局的环境变量查找vue指令,查询办法 which vue
- 然后我们进入到对应的node环境中
- 这里目录我们主要查看bin和lib即可
- 进入到bin目录下即可看到vue指令,这时候我们通过ll指令查看当前目录
,通过lr我们即可知道vue其实只是一个软链接,最终指向的是lib目录下node_modules/@vue/cli/bin/vue.js
- lib/node_modules(全局node_modules)目录含义:我们平时通过使用npm install -g安装好的全局包都会被放在这个目录下。进入到@vue下,下面还会有cli这个项目,这个项目即是我们使用vue命令的源文件代码,进入到bin目录下,有一个vue.js的文件
- 总结:终端解析vue命令并在全局环境中查找,找到后通过软链接链接到vue.js文件,通过nodejs执行vue.js文件,vue.js文件执行comman+optionsz
通过以上的步骤我们自己要如何开发一个脚手架呢?
- 开发npm项目,该项目中包含一个bin/vue.js文件,并将这个项目发布到npm
- 将npm项目安装到node/lib/node_modules
- 在nodejs的bin目录下配置vue的软连接指向lib/node_modules/@vue/cli/bin/vue.js,这样我们在执行vue的时候即可找到vue.js文件进行执行
为什么全局安装@vue/cli后使用的命令变成了vue?
- 翻阅以上5步,@vue/cli最终指向了vue.js文件但是其实他并没有决定最终的vue指令,我们可以打开@vue/cli下的package.json文件查看
全局安装@vue/cli 发生了什么?
- 将依赖下载到/lib/node_modules
- 配置软连接
为什么vue指向一个js文件后,我们却可以通过vue命令执行呢?
- 直接来到vue.js文件,我们可以看到它的头部有这么一句话
#!/usr/bin/env node这句话的代码含义是在全局环境变量中查找node环境并执行
开发流程
- 当我们想在我们新建的包中引入一个正在开发的包,又要避免频繁的publish正在开发的包需要怎么做?这时候需要将我们的包通过软链接(npm link)的形式发布到全局的node_modules包中,在新建的包中npm link developPackage,在package.json中手动加上dependencies,因为此时npm i是没有developPackage
- 借助npm publish可以发布developPackage,发布成功之后借助npm i 安装到依赖中使用,如果只是需要使用npm上的包,不需要本地包,借助npm unlink解除和本地developPackage的软连接