如何实现一个自己的脚手架工具

创建自定义全局命令

在项目文件夹中创建一个bin文件夹,再去npm init 初始化项目,生成的package.json 里面就有一个bin的选项参数指定了命令和执行文件路径

"bin": {"mycli"; "bin/cli.js"
},

执行 npm link挂载到了全局命令中

bin/cli.js
在文件首行加上这句,意思让这个环境变量下的node去执行相关代码

#! /usr/bin/env node

获取命令行的交互参数

process.argv[2] 可以获取
借助commander来处理相关参数

#! /usr/bin/env node
const {program} = require( 'commander')
program.option(-f --framwork <framwork>°,“设置框架’)
program
.command ('create <project› [other ...]')
.alias('crt') // 设置别名
.description('创建项目'.action((project ‚args)=>{// 在回调函数中可以获取到配置的参数// 命令行的执行逻辑代码console.log (project);console.log (args) ;
})
program.parse (process.argv)

将不同的命令拆分成不同模块 lib/core文件夹下不同模块代码
help.js

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

mycommander.js

const myaction = require('./action')const mycommander = function (program) {program.command('create <project> [other...]').alias('crt').description('创建项目').action(myaction)
}module.exports = mycommander

action.js

ar inquirer = require('inquirer')
var config = require('../../config')
var downloadFun = require('./download')
const myAction = async (project, args) => {// 命令行的执行逻辑代码console.log(project);console.log(args);
}module.exports = myAction

bin/cli.js

#! /usr/bin/env node 
const {program} = require('commander')
const myhelp = require('../lib/core/help')
myhelp(program)const mycommander = require('../lib/core/mycommander')
mycommander(program)
program.parse(process.argv)

终端交互

命令行问答交互工具:inquirer

inquirer.prompt([{type: 'list',name: 'framwork',choices: ['express', 'koa', 'egg'],message: '请选择你所使用的框架'}]).then(answer => {console.log(answer)})

下载远程项目代码

插件download-git-repo, 命令行任务等待工具Ora,命令行样式渲染工具chalk
lib/core/download.js

const download = require('download-git-repo')
const ora = require('ora')
const chalk = require('chalk')
const downloadFun = function (url, project) {const spinner = ora().start()spinner.text = '代码正在下载……'download('direct:' + url, project, { clone: true }, (err) => {if (!err) {spinner.succeed('代码下载成功')console.log(chalk.blue.bold('Done!'), chalk.bold('you run:'));console.log('cd ' + project);console.log('npm install ');console.log('npm run dev ');} else {spinner.fail('代码下载失败')}})
}module.exports = downloadFun

lib/core/action.js

var inquirer = require('inquirer')
var config = require('../../config')
var downloadFun = require('./download')
const myAction = async (project, args) => {// 命令行的执行逻辑代码const answer = await inquirer.prompt([{type: 'list',name: 'framwork',choices: config.framwork,message: '请选择你所使用的框架'}])// console.log(answer);// 下载代码模板downloadFun(config.foramworkUrl[answer.framwork],project)
}module.exports = myAction

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

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

相关文章

有效的括号字符串

只想用一个栈解决&#xff0c;可惜一直解决不了&#xff0c;因为 * 的问题无法解决 看到标答用了两个栈&#xff0c;一个栈存储 ( 另一个栈储存 * 思路&#xff1a;当s[k] 为 ( 或 * 进栈 &#xff0c; 当s[k] 为 ) 时 &#xff0c; 优先左括号出栈&#xff08;因为*有…

探索LLaMA模型:架构创新与Transformer模型的进化之路

引言 在人工智能和自然语言处理领域&#xff0c;预训练语言模型的发展一直在引领着前沿科技的进步。Meta AI&#xff08;前身为Facebook&#xff09;在2023年2月推出的LLaMA&#xff08;Large Language Model Meta AI&#xff09;模型引起了广泛关注。LLaMA模型以其独特的架构…

视频批量爬虫下载工具|可导出视频分享链接|抖音视频提取软件

便捷的视频批量爬虫软件操作指南 抖音视频下载界面图解 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量采集视频的解析 对特定关键词进行搜索和视频提取&#xff0c;例如输入“汽车配件”&#x…

2024年洗地机综合实力排行榜:谁才是真正的洗地神器?

近年来&#xff0c;洗地机在行业里&#xff0c;它集合了扫地和拖地以及自动清洁和除菌的功能&#xff0c;备受人们的喜爱&#xff0c;尤其是平时忙于工作并没有多少时间清洁家务的用户&#xff0c;但是对于第一次接触洗地机的用户来说&#xff0c;怎么选购洗地机也是个问题&…

【P1303】 A*B Problem

A*B Problem 题目背景 高精度乘法模板题。 题目描述 给出两个非负整数&#xff0c;求它们的乘积。 输入格式 输入共两行&#xff0c;每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 样例 #1 样例输入 #1 1 2样例输出 #1 2提示 每个非负整数不超过 1 0…

初识React(一)从井字棋游戏开始

写在前面&#xff1a; 磨磨唧唧了好久终于下定决心开始学react&#xff0c;刚刚接触感觉有点无从下脚...新的语法新的格式跟vue就像两种物种...倒是很好奇路由和store是怎么实现的了~v~&#xff0c;一点一点来吧&#xff01;&#xff01;&#xff01; (一)创建项目 使用vite…

【58. 最后一个单词的长度】

58. 最后一个单词的长度 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 class Solution { public: int lengthOfLastWord(string s) …

蓝桥杯算法 - DP

上一篇&#xff1a;[[蓝桥杯算法-排序、递归、全排列]] 动态规划&#xff08;dp&#xff09; dp即动态规划&#xff0c;常用于&#xff1a;数学&#xff0c;计算机科学&#xff0c;管理学&#xff0c;经济和生物信息学。 dp在生活中也很常见&#xff0c;如&#xff1a;你今天…

2023第十四届蓝桥杯C++B组题目解析

起因 24年蓝桥杯将至&#xff0c;把去年题复习一遍。emmm&#xff0c;其实是有一个很厉害的学妹说“要被圈钱杯把钱圈光了”。 现在只是初稿&#xff0c;如果有需要细写解析的可以在下面评论&#xff0c;欢迎留言。 日期统计 #include<bits/stdc.h> typedef long lon…

Java中的面向对象编程有三个重要的属性:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)

封装&#xff08;Encapsulation&#xff09;&#xff1a;封装是面向对象编程的一个基本理念&#xff0c;它将数据和对数据的操作封装在一个类中&#xff0c;并通过类的访问修饰符来控制对数据的访问。封装的目的是隐藏实现细节&#xff0c;使得类的使用者无需关心内部的具体实现…

VUE pc端+移动端上传录音并上传(recorder-core)

首先安装 npm install recorder-core 以下录音组件完整代码可复用 <template><div><div><imgv-if"!isSound"src"/assets/images/mobile/mobileDoWork/answer_question_voice_icon.png"alt""click"recStart"/>…

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…

1.4.2 练习

一、颠倒三角形 题目&#xff1a;修改顶点着色器让三角形上下颠倒 更改顶点着色器代码如下&#xff1a; #version 330 corelayout (location 0) in vec3 aPos; //位置变量的属性位置值为0 layout (location 1) in vec3 aColor; //颜色变量的属性位置值为1out vec3 ourColo…

项目配置之道:优化Scrapy参数提升爬虫效率

前言 在当今信息时代&#xff0c;数据是无处不在且无比重要的资源。为了获取有效数据&#xff0c;网络爬虫成为了一项至关重要的技术。Scrapy作为Python中最强大的网络爬虫框架之一&#xff0c;提供了丰富的功能和灵活的操作&#xff0c;让数据采集变得高效而简单。本文将以爬…

线程和进程有什么区别?

1、典型回答 进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是操作系统中两个重要的概念&#xff0c;都是用来执行任务的&#xff0c;它们的定义如下&#xff1a; 进程是指计算机中正在运行的程序的实例。每个进程都有自己的地址空间、内存、文件…

生成词云...

import wordcloud import jieba import PIL import numpy as np import matplotlib.pyplot as plt import jieba.analyse image_background PIL.Image.open(/home/back/pythonclass/11.jpg) #遮罩 MASK np.array(image_background) txtopen("/home/back/pythoncla…

如何本地部署Imagewheel并实现无公网IP远程连接打造个人云图床

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Mysql数据库——数据备份与恢复

目录 一、数据备份的重要性 二、数据库备份的分类 1.从物理与逻辑的角度分类 2.从数据库的备份策略角度&#xff0c;备份可分为 2.1完全备份 2.2差异备份 2.3增量备份 2.4总结 三、常见的备份方法 四、Mysql数据库完全备份 1.完全备份定义 2.优缺点 3.数据库完全备…

2024南京人工智能展会:定于2024年11月份在南京国际博览中心举行

2024南京国际人工智能展览会&#xff0c;拟定于2024年11月份在南京国际博览中心隆重召开。这一盛大的科技盛宴&#xff0c;无疑将为全球人工智能领域注入新的活力&#xff0c;推动科技创新与社会进步。 此次展览会将以“智能未来&#xff0c;共创辉煌”为主题&#xff0c;汇聚全…

Hbase 王者荣耀数据表 HBase常用Shell命令

大数据课本&#xff1a; HBase常用Shell命令 在使用具体的Shell命令操作HBase数据之前&#xff0c;需要首先启动Hadoop&#xff0c;然后再启动HBase&#xff0c;并且启动HBase Shell&#xff0c;进入Shell命令提示符状态&#xff0c;具体命令如下&#xff1a; $ cd /usr/local…