【Node.js工程师养成计划】之打造自己的脚手架工具

一、创建全局的自定义命令

1、打开一个空文件夹,新建一个bin文件夹,在bin文件夹下新建cli.js文件,js文件可以命名为cli.js(您随意)

在这里插入图片描述

2、在cli.js文件中的开头(!!)写下面这一行代码

#! /usr/bin/env node // 意味着当前环境是调用了系统

/usr/bin/env就是让系统使用node来执行你的脚本文件
在这里插入图片描述

3、在终端进入根目录后执行

npm init

在这里插入图片描述
命令执行完成后,进入package.json文件中会有如下的代码
在这里插入图片描述

4、在终端的根目录下输入npm link命令

在这里插入图片描述
命令完成后,可以在cli.js文件中写如下
在这里插入图片描述
这里你输入的自定义全局命令是你在使用npm init时,project的name (我刚刚写的是 mycli)
在这里插入图片描述
也可以在电脑终端输入
在这里插入图片描述

如果你能正确的输出内容,那么你的全局自定义命令就创建好了。

在这里插入图片描述

二、使用commander处理help选项

commander - npm
Commander 负责将参数解析为选项和命令参数,为问题显示使用错误,并实现一个有帮助的系统。

1、安装commander库

npm install commander

demo

const { program } = require('commander');//这个方法就是添加帮助项,<save>表示传递的参数,使用时应该这样使用 diy -s xxxx 或者 diy --save xxxx
program.option('-s --save <save>','save something');
program.option('--first').option('-s, --separator <char>');program.parse();const options = program.opts();
const limit = options.first ? 1 : undefined;
console.log(program.args[0].split(options.separator, limit));

在这里插入图片描述

const { program } = require('commander')
program.option('-f --frawork <frawork>', '设置框架')program.parse(process.argv)

在这里插入图片描述

三、处理自定义指令选项

const { program } = require('commander')//这个方法就是添加帮助项,<save>表示传递的参数,使用时应该这样使用 diy -s xxxx 或者 diy --save xxxx
program.option('-f --frawork <frawork>', '设置框架')program
.command('create <project> [args...]') //command是创建一个命令比如:mycli create xxxx a b c d
.alias('crt') // //给你的create命令取别名为crt 使用时可以 mycli crt xxxx
.description('create a project')//对这个命令进行描述.action((project,args)=>{//运行这个你定义的命令是要做什么事情,在回调函数中处理你要做的逻辑//do somethingconsole.log(project);console.log(args);
})

四、逻辑代码模块化拆分

在这里插入图片描述
help.js

const myhelp = function (program) {program.option('-f --frawork <frawork>', '设置框架')
}module.exports = myhelp

mycommander.js

const myAction = require('./action')const mycommander = function (program) {program.command('create <project> [args...]') //command是创建一个命令比如:mycli create xxxx a b c d.alias('crt') // //给你的create命令取别名为crt 使用时可以 mycli crt xxxx.description('创建项目')//对这个命令进行描述.action(myAction)
}module.exports = mycommander

action.js

const myAction = (project,args)=>{//do somethingconsole.log(project);console.log(args);
}module.exports = myAction

五、命令行问答交互 inquirer

inquirer - npm
常见交互式命令行用户界面的包

npm install --save inquirer

demo

import inquirer from 'inquirer';inquirer.prompt([/* Pass your questions in here */]).then((answers) => {// Use user feedback for... whatever!!}).catch((error) => {if (error.isTtyError) {// Prompt couldn't be rendered in the current environment} else {// Something else went wrong}});

注意!!!!!
如果你安装了9.0.0及以上的版本,那么你在引入inquirier时不能使用require的引入方式

npm install --save inquirer@^8.0.0

8.0.0及以下的引入方式

const inquirer = require('inquirer');
const inquirer = require('inquirer')inquirer.prompt([{type: 'input',name: 'username',message: '请输入你的名字'}]).then((answers) => {console.log(answers)}).catch((error) => {if (error.isTtyError) {// Prompt couldn't be rendered in the current environment} else {// Something else went wrong}})

在这里插入图片描述

var inquirer = require('inquirer')const myAction = (project,args)=>{inquirer.prompt([{type:'list',choices:['express','koa', 'egg'],name:'framework',message:'请选择你的框架',}]).then((answers) => {console.log(answers)})
}module.exports = myAction

在这里插入图片描述

六、下载远程仓库代码

1、download-git-repo

download-git-repo

npm install download-git-repo

API
download(repository, destination, options, callback)
下载一个 git repository 到 destination 文件夹,配置参数 options, 和 callback回调.

repository
一、可以采用下面简写方式

  • GitHub - github:owner/name 或者 owner/name

  • GitLab - gitlab:owner/name

  • Bitbucket - bitbucket:owner/name

    1、默认是 master 分枝, 但你可以指定分枝和tag ,如 owner/name#my-branch.

    2、你还可以指定自定义来源,如 gitlab:custom.com:owner/name. 自定义来源默认为 https 或 git@ , 你也可以自己之定义协议.

二、Direct - direct:url方式

这种方式会跳过上面简写的方式,直接传递 url.

1、如果使用 direct,并且没有 clone配置项, 你必须传入完整的zip文件地址, 包括分枝(如果需要的话).

2、如果使用 direct 并带有 clone配置项, 你必须传入完整的 git repo url , 你可以通过 direct:url#my-branch指定分枝.

destination:下载仓库的文件路径

options(可选)配置对象:

  • clone - boolean 默认 false - 如果设置成 true,会使用 git clone http 下载. 这种方式可能会比较慢, 他不支持私人的 repositories.
  • 其他配置项 (proxy, headers, filter, 等.) 会传递下去,并覆盖默认值
    http下载特有配置项: https://github.com/kevva/download#options
    clone 特有配置项: https://github.com/jaz303/git-clone#clonerepo-targetpath-options-cb

callback:回调函数,会传入err

2、demo

const download = require('download-git-repo')download('direct:https://github.com/ZhangMin1998/vite_job_hunt_app.git', './xxx', {clone: true}, (err) => {console.log(err)
})

在这里插入图片描述

七、下载等待交互提示

ora
在这里插入图片描述

npm install ora@5

demo

import ora from 'ora';const spinner = ora('Loading unicorns').start();setTimeout(() => {spinner.color = 'yellow';spinner.text = 'Loading rainbows';
}, 1000);

在这里插入图片描述

const download = require('download-git-repo')
const ora = require('ora')const downloadFun = function (url, project) {const spinner = ora().start()spinner.text = '代码正在下载...'download('direct:https://github.com/ZhangMin1998/vite_job_hunt_app.git', project, {clone: true}, (err) => {console.log(err)if (!err) {spinner.succeed('下载结束')} else {spinner.fail(err)}})
}module.exports = downloadFun

八、命令样式输出

chalk

npm install chalk@4
import chalk from 'chalk';console.log(chalk.blue('Hello world!'));

在这里插入图片描述

静待更新!!!
静待更新!!!
静待更新!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/314734.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows环境下安装Apache

首先apache官网下载地址&#xff1a;http://www.apachelounge.com/download/按照自己的电脑操作系统来安装 这里我安装的是win64 主版本是2.4的apache。 然后解压压缩包到一个全英文的路径下&#xff01;&#xff01;&#xff01;一定一定不要有中文 中文符号也不要有&#xff…

十一、Yocto集成tcpdump等网络工具

文章目录 Yocto集成tcpdump等网络工具networking layer集成 Yocto集成tcpdump等网络工具 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第十一篇文章&#xff1a; 一、yocto 编译raspberrypi 4B并启动 二、yocto 集成ros2(基于raspberrypi 4B) 三、Yocto创建自定义的lay…

RabbitMQ工作模式(5) - 主题模式

概念 主题模式&#xff08;Topic Exchange&#xff09;是 RabbitMQ 中一种灵活且强大的消息传递模式&#xff0c;它允许生产者根据消息的特定属性将消息发送到一个交换机&#xff0c;并且消费者可以根据自己的需求来接收感兴趣的消息。主题交换机根据消息的路由键和绑定队列的路…

演示在一台Windows主机上运行两个Mysql服务器(端口号3306 和 3307),安装步骤详解

目录 在一台Windows主机上运行两个Mysql服务器&#xff0c;安装步骤详解因为演示需要两个 MySQL 服务器终端&#xff0c;我只有一个 3306 端口号的 MySQL 服务器&#xff0c;所以需要再创建一个 3307 的。创建一个3307端口号的MySQL服务器1、复制 mysql 的安装目录2、修改my.in…

NAT网络地址转换实验(华为)

思科设备参考&#xff1a;NAT网络地址转换实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 NAT&#xff08;Network Address Translation&#xff09;&#xff0c;即网络地址转换技术&#xff0c;是一种在现代计算机网络中广泛应用的技术&#xff0c;主要用于有效管…

nvm基本使用

nvm基本使用 文章目录 nvm基本使用1.基本介绍2.下载地址3.常用指令 1.基本介绍 NVM是一个用于管理 Node.js 版本的工具。它允许您在同一台计算机上同时安装和管理多个 Node.js 版本&#xff0c;针对于不同的项目可能需要不同版本的 Node.js 运行环境。 NVM 主要功能&#xff…

百度智能云千帆 ModelBuilder 技术实践系列:通过 SDK 快速构建并发布垂域模型

​百度智能云千帆大模型平台&#xff08;百度智能云千帆大模型平台 ModelBuilder&#xff09;作为面向企业开发者的一站式大模型开发平台&#xff0c;自上线以来受到了广大开发者、企业的关注。至今已经上线收纳了超过 70 种预置模型服务&#xff0c;用户可以快速的调用&#x…

STM32的端口引脚的复用功能及重映射功能解析

目录 STM32的端口引脚的复用功能及重映射功能解析 复用功能 复用功能的初始化 重映射功能 重映射功能的初始化 复用功能和重映射的区别 部分重映射与完全重映射 补充 STM32的端口引脚的复用功能及重映射功能解析 复用功能 首先、我们可以这样去理解stm32引脚的复用功能…

docker容器技术篇:容器集群管理实战mesos+zookeeper+marathon(一)

容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; mesos概述 1.1 Mesos是什么 Apache Mesos 是一个基于多资源调度的集群管理软件&#xff0c;提供了有效的、跨分布式应用或框架的资源隔离和共享&#xff0c;可以运行 Hadoop、Spark以及docker等。 1.2 为…

Flowable 基本用法

一. 什么是Flowable Flowable 是一个基于 Java 的开源工作流引擎&#xff0c;用于实现和管理业务流程。它提供了强大的工作流引擎和一套丰富的工具&#xff0c;使开发人员能够轻松地建模、部署、执行和监控各种类型的业务流程。Flowable 是 Activiti 工作流引擎的一个分支&am…

服务网关GateWay基础

1. 网关基础介绍1.1 网关是什么1.2 为啥要用网关1.3 常见的网关组件NginxNetflix ZuulSpring Cloud GatewayKongAPISIX综合比较 2. gateWay的使用2.1 springCloud整合gateway2.2 GateWay的相关用法2.3 GateWay路由使用示例基本用法转发/重定向负载请求动态路由 2.5 断言(Predic…

使用Screenshots安装Fedora 40版本详细教程

Fedora 40是Fedora操作系统的最新版本&#xff0c;于 2024 年 4 月 23 日发布&#xff0c;是一个社区支持的 Linux 发行版&#xff0c;以其创新功能、领先技术和活跃的社区支持而闻名。 在本指南中&#xff0c;我们将引导您完成安装Fedora 40 Server的分步过程&#xff0c;确保…

Docker之存储配置与管理

一、容器本地配置与Docker存储驱动 每个容器都被自动分配了本地存储&#xff0c;也就是内部存储。容器由一个可写容器层和若干只读镜像层组成&#xff0c;容器的数据就存放在这些层中。 容器本地存储采用的是联合文件系统。这种文件系统将其他文件系统合并到一个联合挂载点&a…

【c++】深入剖析与动手实践:C++中Stack与Queue的艺术

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章我们来到STL新的内容&#xff0c;stack和queue 目录 1. stack的介绍与使用函数介绍例题一&#xff1a;最小栈例题二&#xff1a;栈的压入、弹出队列栈的模…

springcloud按版本发布微服务达到不停机更新的效果

本文基于以下环境完成 spring-boot 2.3.2.RELEASEspring-cloud Hoxton.SR9spring-cloud-alibaba 2.2.6.RELEASEspring-cloud-starter-gateway 2.2.6.RELEASEspring-cloud-starter-loadbalancer 2.2.6.RELEASEnacos 2.0.3 一、思路 实现思路&#xff1a; 前端项目在请求后端接…

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 Ubuntu下的内核编译&#xff08;打造最精确的编译步骤&#xff09;_ubuntu 内核编译-CSDN博客 【Linux】&#xff08;Ubuntu&#xff09;内核编译 && 镜像制作_ubuntu 内核编译-CS…

Ubuntu部署jmeter与ant

为了整合接口自动化的持续集成工具&#xff0c;我将jmeter与ant都部署在了Jenkins容器中&#xff0c;并配置了build.xml 一、ubuntu部署jdk 1&#xff1a;先下载jdk-8u74-linux-x64.tar.gz&#xff0c;上传到服务器&#xff0c;这里上传文件用到了ubuntu 下的 lrzsz。 ubunt…

基于jenkins+docker实现CI/CD实践

项目简介 利用 Jenkins、Docker、SonarQube 和 Harbor 技术&#xff0c;搭建一个完整的 CI/CD 管道&#xff0c;实现持续集成、持续交付和持续部署的流程。通过自动化构建、测试、代码质量检查和容器化部署&#xff0c;将开发人员从繁琐的手动操作中解放出来&#xff0c;提高团…

SQLite运行时可加载扩展(三十五)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite轻量级会话扩展&#xff08;三十四&#xff09; 下一篇:SQLite的DBSTAT 虚拟表&#xff08;三十六) 1. 概述 SQLite 能够在运行时加载扩展&#xff08;包括新的应用程序定义的 SQL 函数、整理序列、虚拟表和 VFS&…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集&#xff0c;是目标检测yolo格式的&#xff0c;有火焰、烟雾两个目标&#xff0c;下图是训练时候的样子&#xff1a; 训练方法看这里&#xff1a; https://qq742971636.blog.csdn.net/article/details/138097481 数据集介绍 都是博主辛苦整理和标注的&…