脚手架系列
脚手架运行原理都是一样的,分为安装和使用。
我们以vue-cli
为例,首先全局安装 npm install -g @vue/cli
,再使用 vue create demo
创建项目
全局安装 npm install -g @vue/cli
时发生了什么 ?
- 下载项目和依赖包到全局 node_modules 中
- 读取package.json的bin字段创建vue可执行文件,指向bin/vue.js文件
首先我们要清楚,能在命令行中识别的命令,一定是要在环境变量中能找到,所以当我们安装nodejs后,会在电脑环境变量中增加nodejs命令目录,默认是 C:/Program Files/nodejs
下载项目和依赖包到全局 node_modules 中
下图就是@vue/cli
项目的代码
读取package.json的bin字段创建可执行文件指向一个js文件
这句就会在nodejs目录下创建 vue
文件名的可执行文件,文件里内容指向 bin/vue.js
"bin": {
"vue": "bin/vue.js"
},
执行 vue create demo
命令时发生了什么 ?
- 在环境变量中找到vue可执行文件
- @vue\cli\bin\vue.js文件的首行是
#!/usr/bin/env node
指定用node解析文件
在环境变量中找到vue可执行文件
which vue 可找到环境变量中命令
@vue\cli\bin\vue.js文件的首行是
#!/usr/bin/env node
指定用node解析文件
vue create demo
就变为执行 C:\Program Files\nodejs\node.exe node_modules\@vue\cli\bin\vue.js create demo
问题
能回答以下问题,就掌握了脚手架的实现原理:
- 为什么全局安装
@vue/cli
后添加的命令为vue
?
安装是根据package.json中bin对象,key是作为环境变量中可执行命令,value指向的实际运行js文件
- 全局安装
npm install -g @vue/cli
时发生了什么 ?
- 下载项目和依赖包到全局 node_modules 中
- 读取package.json的bin字段创建vue可执行文件,指向bin/vue.js文件
- 执行
vue create demo
命令时发生了什么 ?
- 环境变量中查找vue命令
- 使用node环境执行bin/vue.js文件
- 为什么
vue
命令指向一个js文件,却能运行 ?
- 首行是`#!/usr/bin/env node`指明node执行
实验 npm link 是一样原理
npm init -y
创建新项目,在package.json中bin增加
"bin": {
"haotianqi": "donglaxiche.js"
},
- 创建
donglaxiche.js
文件
#!/usr/bin/env node
console.log("donglaxiche.js 执行了");
-
npm link 安装到全局
-
命令行中执行
haotianqi
输出成功 -
检查 nodejs 环境变量中有 haotianqi 可执行文件,node_modules 软连接到了项目