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

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

脚手架的简介

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

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执行;
相关推荐
Xxtaoaooo14 分钟前
React Native跨平台鸿蒙开发实战:JS 与 ArkTS Native的通信机制详解
javascript·react native·harmonyos
michael_ouyang17 分钟前
IM 会话同步企业级方案选型
前端·websocket·electron·node.js
betazhou19 分钟前
借用Deepseek写一个定期清理备份文件的ps脚本
开发语言·前端·javascript·ps·deepseek·清理备份文件
英俊潇洒美少年23 分钟前
vue confirm、messageBox等弹窗关闭后焦点残留问题
前端·javascript·vue.js
harrain28 分钟前
vue3怎么扩展第三方依赖库内部逻辑(拿element plus举例)
前端·javascript·vue.js·elementui
绝世这天下31 分钟前
【使用 NVM 安装 Node.js 22 并配置国内镜像加速】
node.js
资深web全栈开发38 分钟前
JS防爬虫3板斧
开发语言·javascript·爬虫
天若有情6731 小时前
从语法拆分到用户感知:我的前端认知重构之路
前端·javascript
摘星编程1 小时前
用React Native开发OpenHarmony应用:DrawerNavigation侧滑关闭
javascript·react native·react.js
阿蒙Amon1 小时前
TypeScript学习-第2章:基础类型
javascript·学习·typescript