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

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

脚手架的简介

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

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执行;
相关推荐
霸王蟹2 分钟前
React 19中如何向Vue那样自定义状态和方法暴露给父组件。
前端·javascript·学习·react.js·typescript
shenyan~23 分钟前
关于 js:9. Node.js 后端相关
前端·javascript·node.js
欧先生^_^2 小时前
Node.js 源码概览
node.js
进取星辰2 小时前
31、魔法生物图鉴——React 19 Web Workers
开发语言·javascript·ecmascript
HSunR3 小时前
vue3 elementplus tabs切换实现
javascript·vue.js·elementui
搏博3 小时前
WPS中代码段的识别方法及JS宏实现
开发语言·javascript·wps
三天不学习3 小时前
VueUse/Core:提升Vue开发效率的实用工具库
前端·javascript·vue.js·vueuse
好青崧3 小时前
等于和绝对等于的区别
javascript
半青年4 小时前
Qt图表库推荐指南与分析
c语言·开发语言·javascript·c++·qt·信息可视化
卓律涤5 小时前
【找工作系列①】【大四毕业】【复习】巩固JavaScript,了解ES6。
开发语言·前端·javascript·笔记·程序人生·职场和发展·es6