从使用角度理解什么是脚手架?

脚手架在我们创建目录时经常用到过,但却很少探究它的原理,本篇文章呢就和大家一起来探究脚手架的原理,执行命令的背后到底做了什么事。

脚手架的简介

举一个例子🌰,我们创建项目时经常用到的一个命令;

js 复制代码
vue create vue-test

上面这条命令由3部分组成:

  1. 主命令:vue
  2. command:create
  3. command的param:vue-test

它表示创建一个vue的项目,这个项目的名称是vue-test,这是一个简单的脚手架命令,还有更加复杂的场景; 比如说:当前的目录下已经有文件了,我们需要覆盖掉当前目录的文件,强制进行安装vue的项目,此时我们可以用:

js 复制代码
vue create vue-test --force

这里的--force叫做option,用来辅助脚手架确定在特定场景下用户的选择(可以理解为配置),还有一种场景:

通过vue create创建项目时,会自动执行npm install帮用户安装以来,如果我们希望用淘宝源来安装可以使用如下命令:

js 复制代码
vue create vue-test --force -r https://registry.npm.taobao.org

上面的-r也叫做option,这里的-r也可以替换成--registry;有这么多的命令,我们怎么知道怎么用呢?这时我们就可以用到下面这个命令,输入这个命令就可以看到vue create支持的所有的options;

js 复制代码
vue create --help

-r https://registry.npm.taobao.org后面的https://registry.npm.taobao.org成为option的param,其实--force也可以理解为--force true,简写成:--force或者-f;

脚手架的执行原理

我们在终端输入vue create vue-test命令时,它到底是怎么处理的呢?

1.输入vue create vue-test命令;

2.终端会在环境变量中找到vue指令;

如何在环境变量中找到vue指令呢?

在终端中输入which vue,我们可以看到node安装目录下的bin目录下的vue这个命令;

我们可以进入node的目录看一下cd /Users/Minjie/.nvm/versions/node/v19.9.0/,在node目录下它是有如下一些文件夹:

这里我们重点看的是binlib目录,它们和脚手架的执行原理有关;在这个bin的目录下面,有一个vue的命令;

我们直接输入vue,其实执行的是node下bin目录下的vue; 这里的vue是一个超链接,我看一下它指向了哪里;首先进入lib/node_modules目录;我们通过npm -g安装的包都会放到这个目录来;在这里可以查询出我们所有全局安装的包;

接着我们进入@vue/cli目录下,我们可以看到vue-cli的源码,它有一个bin目录,bin目录下有一个vue.js,上文所讲的vue超链接就是指向这里的vue.js

它的过程可参考下图,vue超链接实际执行的是lib/node_modules下的vue.js文件:

脚手架执行的原理如下:

  1. 在终端输入vue create vue-test;
  2. 终端解析出vue命令;
  3. 终端在环境变量中找到vue命令;
  4. 终端根据vue命令链接到实际文件vue.js
  5. 终端利用node执行vue.js
  6. vue.js解析command/options
  7. vue.js执行command;
  8. 执行完毕,退出执行;

从应用的角度看如何开发一个脚手架?

这里以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执行;
相关推荐
技术小丁16 分钟前
零依赖!教你用原生 JS 把 JSON 数组秒变 CSV 文件
前端·javascript
古一|20 分钟前
Vue路由两种模式深度解析+Vue+SpringBoot生产部署全流程(附Nginx配置)
javascript·vue.js·nginx
lpfasd1231 小时前
从 Electron 转向 Tauri:用 Rust 打造更轻、更快的桌面应用
javascript·rust·electron
非凡ghost1 小时前
图吧工具箱-电脑硬件圈的“瑞士军刀”
前端·javascript·后端
非凡ghost1 小时前
Xrecode3(多功能音频转换工具)
前端·javascript·后端
橙某人1 小时前
飞书多维表格插件:进一步封装,提升开发效率!🚀
前端·javascript
非凡ghost1 小时前
Subtitle Edit(字幕编辑软件) 中文绿色版
前端·javascript·后端
用户84298142418101 小时前
10个JavaScript编程实用技巧
javascript
扎瓦斯柯瑞迫1 小时前
cursor: 10分钟魔改环境、优雅获取Token
前端·javascript·后端
Violet_YSWY2 小时前
将axios、async、Promise联系在一起讲一下&讲一下.then 与其关系
开发语言·前端·javascript