『手撕Vue-CLI』自动安装依赖
开篇
经过『手撕Vue-CLI』拷贝模板,实现了自动下载并复制指定模板到目标目录。然而,虽然项目已复制,但其依赖并未自动安装,可能需要用户手动操作,这并不够智能。
正如前文所述,我们已经了解了业务需求和背景。那么,接下来我们将直接深入探讨核心实现细节。
自动安装依赖
在前文中,我们已经将模板文件复制到了指定目录。接下来,我们需要在该目录下执行 npm install
命令,以自动安装依赖。
如何安装依赖?
我们平时咋安装依赖的?对,就是在项目目录下执行 npm install
命令。那么,我们如何在 Node.js 中执行这个命令呢?
在写这篇文章之前,我在自己实现的过程中,也是遇到了这个问题。我查阅了很多资料,最终找到了一个解决方案,那就是使用 shelljs
库。
所以先来给大家简单介绍一下 shelljs
。
shelljs
shelljs
是一个 Node.js 模块,它提供了一组简单的 Unix shell 命令,可以用于执行 shell 脚本。它是一个轻量级的模块,可以在 Node.js 环境中运行。
shelljs
的主要特点如下:
- 轻量级:
shelljs
是一个轻量级的模块,可以在 Node.js 环境中运行。 - 简单易用:
shelljs
提供了一组简单的 Unix shell 命令,可以用于执行 shell 脚本。 - 跨平台:
shelljs
可以在 Windows、Linux 和 macOS 等操作系统上运行。 - 兼容性好:
shelljs
兼容大多数 Unix shell 命令,可以方便地在 Node.js 环境中使用。 - 开源:
shelljs
是一个开源项目,可以在 GitHub 上查看源代码。 - 社区活跃:
shelljs
有一个活跃的社区,可以在 GitHub 上提交问题和建议。 - 文档齐全:
shelljs
有详细的文档,可以帮助开发者快速上手。 - 安装方便:
shelljs
可以通过 npm 安装,非常方便。 - 使用方便:
shelljs
提供了一组简单的 API,可以方便地执行 shell 命令。
就先简单介绍这么多,接下来我们来看看如何使用 shelljs
。
安装 shelljs
首先,我们需要安装 shelljs
,可以通过 npm 安装:
npm install shelljs
安装完成后,我们就可以在项目中使用 shelljs
了。
使用 shelljs
在项目中使用 shelljs
非常简单,只需要引入 shelljs
模块,然后调用相应的 API 即可。
那么就来看看如何在我们自己编写的 nue-cli 项目中如何使用 shelljs
来完成自动安装依赖的功能。
实现自动安装依赖
shelljs 安装好了,现在需要在项目中引入它。在 bin\create.js
文件中添加如下代码:
const shell = require('shelljs');
接下来,需要在 create.js
中添加自动安装依赖的代码,我这里先一步一步来,我先写一下实现步骤,定义一个方法的名字为 installDependencies
,然后在这个方法中调用 shelljs
的 exec
方法,执行 npm install
命令。
const installDependencies = () => {
shell.exec('npm install');
}
代码写好了,接下来在 create.js
中主流程中调用这个方法:
// 执行 npm install
await waitLoading('installing dependencies...', installDependencies)();
代码写到这我发现一个问题,就是 shelljs
的 exec
方法是异步的,我要改造一下将其改为同步的,用之前的 promisify 方法,单独转一下 exec 方法:
const exec = promisify(shell.exec);
还有一个问题就是,我们拷贝好了模板到当前的目录,现在是要执行安装依赖,我们目前所处的位置还不是模板的根目录,所以我们需要先进入到模板的根目录,然后再执行 npm install
命令。
所以之前的 installDependencies
方法需要改造一下,加入进入到模板根目录的逻辑,还需要传递一个参数,就是模板的名称(projectName):
const installDependencies = async (projectName) => {
shell.cd(projectName);
await exec('npm install');
}
经过这一版本的改造,自动安装依赖功能就实现了,接下来来测试一下。
测试
因经过上篇文章的测试过后,项目已经拷贝过来了,所以我会将之前的代码注释掉,主流程当中就只会执行 installDependencies
方法。
为了展示运行过程,我准备了一个动图(gif)作为演示。不过,在录制过程中出现了一个小错误,似乎是因为模板依赖未能成功下载。我会在接下来的时间尝试更换一个源,并带领大家一起探索问题解决方案。待到问题解决后,将继续在下一篇文章中分享。感谢您的阅读,我们下篇文章再会。
『手撕Vue-CLI』自动安装依赖的更多相关文章
- 【Vue CLI】从安装到构建项目再到目录结构的说明
目录 1. 构建我们的项目 2. 目录结构说明 2.1 build目录 2.2 config目录 2.3 src目录 2.4 static目录 "Vue CLI是一个基于Vue.js进行快速 ...
- VUE CLI 3.0 安装及创建项目
一.安装 VUE CLI 3.0 官网: https://cli.vuejs.org/ 详细资料可以自己先把官网过一遍. 1. 安装(默认你的电脑上已安装node及npm) npm install ...
- vue工具 - vue/cli@3.xx 安装使用流程
mac安装记得npm前边加sudo 安装脚手架,用于生成目录 npm install -g @vue/cli 安装用于编译单个的.vue文件 npm install -g @vue/cli-servi ...
- node.js和vue cli脚手架下载安装配置方法
一.node.js安装以及环境配置 1.下载vue.js 下载地址: https://nodejs.org/en/ 2.安装node.js 下载完成后,双击安装包开始安装.安装地址最好换成自己指定的地 ...
- windows系统下 VUE cli手脚架环境安装
1.安装 node.js环境 (cmd命令工具里输入 node -v 检测是否安装成功) 2.安装VUE 全局环境 npm install --global vue-cli (cmd命令工具里面安装 ...
- Vue学习小结(一)安装依赖与数据来源
不多说啥了,生活中都是各种阵痛与惊喜.最近在学习vue框架,刚写完一个小型的后台管理系统(https://github.com/michaelzhengzm/info-manager-systerm_ ...
- vue 使用npm install安装依赖失败 【问题分析与解决】
1 进入项目根目录,先通过 npm install 命令安装项目所需依赖,再通过 vue ui 命令打开 Vue Cli 提供的图形化界面,选择项目所在文件夹将项目导入. 出现问题 npm insta ...
- vue项目 npm install 安装依赖 特别慢 解决办法
使用NPM(Node.js包管理工具)安装依赖时速度特别慢,为了安装Express,执行命令后两个多小时都没安装成功,最后只能取消安装,笔者20M带宽,应该不是我网络的原因,后来在网上找了好久才找到一 ...
- scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?
css的预编译: 使用步骤: 第一步:用npm下三个loader(sass-loader.css-loader.node-sass): 第二步:在build目录找到webpack.base.confi ...
- Vue CLI 5 和 vite 创建 vue3.x 项目以及 Vue CLI 和 vite 的区别
这几天进入 Vue CLI 官网,发现不能选择 Vue CLI 的版本,也就是说查不到 vue-cli 4 以下版本的文档. 如果此时电脑上安装了 Vue CLI,那么旧版安装的 vue 项目很可能会 ...
随机推荐
- 一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?
简介: 虽然 Dapr 在国外有很高的关注度,但在国内知名度非常低,而且现有的少量 Dapr 资料也偏新闻资讯和简单介绍,缺乏对 Dapr 的深度解读.在 Dapr v1.0 发布之际,我希望可以通过 ...
- SpringBoot项目添加2FA双因素身份认证
什么是 2FA(双因素身份验证)? 双因素身份验证(2FA)是一种安全系统,要求用户提供两种不同的身份验证方式才能访问某个系统或服务.国内普遍做短信验证码这种的用的比较少,不过在国外的网站中使用双因素 ...
- Redisant Toolbox——面向开发者的多合一工具箱
Redisant Toolbox--面向开发者的多合一工具箱 Redisant Toolbox 拥有超过30种常用的开发工具:精心设计,快速.高效:离线使用,尊重您的隐私.官网地址:http://ww ...
- 004—Orcad创建简单分裂元件
004-Orcad创建简单分裂元件 以TPS545为例,先查看datasheet,管脚图,PCB封装.新建库,设置名称和part的数量,然后添加管脚,设定管脚属性.电源管脚要勾选Pin Visble. ...
- Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
一.写在开头 最近一直在更新<Java成长计划>这个专栏,主要是Java全流程学习的一个记录,目前已经更新到Java并发多线程部分,后续会继续更新:而今天准备开设一个全新的专栏 <E ...
- Vue3 项目
创建 Vue3 项目的步骤如下: 安装 Node.js Vue3 需要依赖 Node.js 环境,因此需要先安装 Node.js.可以从官网下载 Node.js 的安装包并安装,也可以使用包管理器安装 ...
- 使用 Splashtop 启用员工远程访问
使员工进行远程工作似乎是一项耗时.不安全且昂贵的任务.但是,借助 Splashtop,您可以快速.轻松.安全地使您的员工从任何位置以最高 价值远程访问其工作站. 如何使用 Splashtop 启用 ...
- C数据结构:KMP算法详解(呕心沥血)
KMP算法 作者心声 了解暴力求解(必需会) KMP算法详解 记住我这段话(你会爱上它的)← : ①前后缀及其用处 ②求出前后缀的next数组 求出next数组的代码 开始实现KMP算法 结尾 附上源 ...
- 5GC 关键技术之网络切片
目录 文章目录 目录 前文列表 网络切片的需求来自于业务对网络提出的差异化要求 基于 3 大业务场景的切片 基于切片资源访问对象的切片 网络切片的商业价值 网络切片的底层技术支撑 网络切片的粒度 网络 ...
- ClipBord 复制 Html winform
剪贴板针对不同的数据格式,在组织剪贴板内容时,有不同的格式要求.最简单的是,复制一般的.txt文本内容.使用方法 ClipBord.Clear(); ClipBord.SetText(str); 复制 ...