开篇

经过『手撕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,然后在这个方法中调用 shelljsexec 方法,执行 npm install 命令。

const installDependencies = () => {
shell.exec('npm install');
}

代码写好了,接下来在 create.js 中主流程中调用这个方法:

// 执行 npm install
await waitLoading('installing dependencies...', installDependencies)();

代码写到这我发现一个问题,就是 shelljsexec 方法是异步的,我要改造一下将其改为同步的,用之前的 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』自动安装依赖的更多相关文章

  1. 【Vue CLI】从安装到构建项目再到目录结构的说明

    目录 1. 构建我们的项目 2. 目录结构说明 2.1 build目录 2.2 config目录 2.3 src目录 2.4 static目录 "Vue CLI是一个基于Vue.js进行快速 ...

  2. VUE CLI 3.0 安装及创建项目

    一.安装 VUE CLI 3.0 官网: https://cli.vuejs.org/   详细资料可以自己先把官网过一遍. 1. 安装(默认你的电脑上已安装node及npm) npm install ...

  3. vue工具 - vue/cli@3.xx 安装使用流程

    mac安装记得npm前边加sudo 安装脚手架,用于生成目录 npm install -g @vue/cli 安装用于编译单个的.vue文件 npm install -g @vue/cli-servi ...

  4. node.js和vue cli脚手架下载安装配置方法

    一.node.js安装以及环境配置 1.下载vue.js 下载地址: https://nodejs.org/en/ 2.安装node.js 下载完成后,双击安装包开始安装.安装地址最好换成自己指定的地 ...

  5. windows系统下 VUE cli手脚架环境安装

    1.安装 node.js环境  (cmd命令工具里输入 node -v 检测是否安装成功) 2.安装VUE 全局环境 npm install --global vue-cli (cmd命令工具里面安装 ...

  6. Vue学习小结(一)安装依赖与数据来源

    不多说啥了,生活中都是各种阵痛与惊喜.最近在学习vue框架,刚写完一个小型的后台管理系统(https://github.com/michaelzhengzm/info-manager-systerm_ ...

  7. vue 使用npm install安装依赖失败 【问题分析与解决】

    1 进入项目根目录,先通过 npm install 命令安装项目所需依赖,再通过 vue ui 命令打开 Vue Cli 提供的图形化界面,选择项目所在文件夹将项目导入. 出现问题 npm insta ...

  8. vue项目 npm install 安装依赖 特别慢 解决办法

    使用NPM(Node.js包管理工具)安装依赖时速度特别慢,为了安装Express,执行命令后两个多小时都没安装成功,最后只能取消安装,笔者20M带宽,应该不是我网络的原因,后来在网上找了好久才找到一 ...

  9. scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?

    css的预编译: 使用步骤: 第一步:用npm下三个loader(sass-loader.css-loader.node-sass): 第二步:在build目录找到webpack.base.confi ...

  10. Vue CLI 5 和 vite 创建 vue3.x 项目以及 Vue CLI 和 vite 的区别

    这几天进入 Vue CLI 官网,发现不能选择 Vue CLI 的版本,也就是说查不到 vue-cli 4 以下版本的文档. 如果此时电脑上安装了 Vue CLI,那么旧版安装的 vue 项目很可能会 ...

随机推荐

  1. 云效DevOps实践-如何基于云效实现测试自动化集成和分析

    简介: 对于现代软件研发来说,持续.快速.高质量.低风险地交付需求特性,是业务对研发的主要诉求.而要做到这一点,除了要有良好的架构设计.卓越的工程能力,快速可靠的测试反馈也是其非常重要的一环,达到这一 ...

  2. OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心

    简介: 2021年5月20日,据国际事务处理性能委员会(TPC,Transaction Processing Performance Council)官网披露,蚂蚁集团自主研发的分布式关系型数据库Oc ...

  3. Facebook宕机背后,我们该如何及时发现DNS问题

    ​简介: 国庆期间,Facebook 及其旗下 Instagram 和 WhatsApp 等应用全网宕机,停机时间将近 7 小时 5 分钟,Facebook 市值损失 643 亿美元.针对Facebo ...

  4. [FAQ] panic: listen tcp :xxxx: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

    在 Go 中运行服务之前的绑定端口这一步,如果端口号被占用了,那么会提示它只能使用一次. 换个端口号或者检查端口号的占用程序. Link:https://www.cnblogs.com/farwish ...

  5. dotnet 使用 XWT 构建跨平台客户端 入门篇

    本文告诉大家如何入门开始开发一个基于 mono 组织开源的 XWT 跨平台客户端 UI 框架的应用,本文的 xwt 是在 GitHub 上完全开源的,基于 MIT 协议的,底层采用 GTK# 的 UI ...

  6. LabView十六进制与字符串之间的转换

    一.准备工具 Labview开发软件 字符串与十六进制的转换工具(做测试使用) 在线转换工具:IEE754浮点数16进制转换 本地工具如下图所示: 二.LabView字符串转换为十六进制 在数值中选择 ...

  7. 第8讲 browse命令的使用技巧

    第8讲 browse命令的使用技巧 1.浏览所有parts,使用技巧 选中工程文件*.dsn/Edit/Browse/Parts.列出工程中用到的所有元件,方便在画完原理图后,查看哪些元件没有编号或数 ...

  8. 检索增强生成RAG-书生浦语大模型实战营学习笔记3&大语言模型8

    大语言模型学习-8.检索增强生成RAG 书生浦语大模型实战营学习笔记3 本文主要涉及检索增强生成相关基础知识,也包括第二期实战营的第3课的内容 动机 当今大语言模型存在幻觉现象,即大模型会无意义或不忠 ...

  9. Docker手工部署GO环境

    参考: (最新2020)Golang 使用Dockerfile 打包部署到 docker https://blog.csdn.net/weixin_44042863/article/details/1 ...

  10. TeamViewer 免费版的安全性和隐私问题

    TeamViewer 靠个免费个人版获取了大量用户,但也因为这个遭遇大量吐槽.国内用户吐槽的焦点在于"被提示用于商业用途,要求购买许可,但是商业许可又太贵". 接下来这份新闻,我们 ...