vue create vue-test-app 命令输入后,终端做了什么处理
- 在终端输入vue create vue-test-app
- 终端解析出vue命令
- 终端在环境变量中找到vue命令
- 终端根据vue命令链接到实际文件vue.js
- 终端利用node执行vue.js
- vue.js解析command/options
- vue.js执行command
- 执行完毕,退出执行
从应用的角度看如何开发一个脚手架
这里以vue-cli为例
- 开发npm项目,该项目中应包含一个bin/vue.js文件,并将整个项目发布到npm
- 将npm项目安装到node的lib/node_modules
- 在node的bin目录下配置vue软链接指向lib/node_modules/@vue/cli/bin/vue.js 这样我们在执行vue命令的时候就可以找到vue.js进行执行
为什么全局安装@vue/cli后会添加的命令为vue?
全局安装@vue/cli时发生了什么
- 将依赖下载到指定的lib/node_modules目录下
- 配置bin的软链接
包的命名为什么是@vue/cli
@vue是group name,这样可以避免cli重复,所以设置一个上级组织
执行vue命令时发生了什么?为什么vue指向一个js文件,我们却可以直接通过vue命令直接去执行它
- 环境变量中vue命令是否有被注册
- js文件里面添加了环境变量
为什么说脚手架本质是操作系统的客户端?它和我们在PC上安装的应用/软件有什么区别?
- 脚手架本质执行起来是依赖node命令,node是操作系统客户端,vue.js仅仅是node的一个参数,仅仅是把参数注入到node当中,
如何为node脚手架命令创建别名
- 使用软链接
描述脚手架命令执行的全过程
脚手架开发流程详解
- 创建npm项目
- 创建脚手架入口文件,最上方添加:
#!/user/bin/env node
- 配置package.json,添加bin属性
- 编写脚手架代码
- 将脚手架发布到npm
使用流程
- 安装脚手架
npm install -g your-own-cli
- 使用脚手架
your-own-cli
脚手架开发难点解析
- 分包:将复杂的系统拆分成若干个模块
- 命令注册:
vue create
vue add
vue invoke
还有很多,比如:
- 命令行交互
- 日志打印
- 命令行文字变色
- 网络通信:HTTP/WebSocket
- 文件处理。。。
脚手架本地link标准流程
链接本地脚手架:
cd your-cli-dir
npm link
链接本地库文件:
cd your-lib-dir
npm link
cd your-cli-dir
npm link your-lib
取消链接本地库文件
cd your-lib-dir
npm unlink
cd your-cli-dir
# link存在
npm unlink your-lib
# link不存在
rm -rf node_modules
npm install
理解npm link:
-
npm link your-lib 将当前项目中node_modules下指定的库文件链接到node全局node_modules下的库文件
-
npm link 将当前项目链接到node全局node_modules中作为一个库文件,并解析bin配置创建可执行文件
理解npm unlink:
- npm unlink: 将当前项目从node全局node_modules中移除
- npm unlink your-lib:将当前项目中的库文件依赖移除