如何搭建一个自己的 cli 脚手架

搭建脚手架的目的:快速搭建项目的基本结构并提供项目规范和约定。

搭建 cli 脚手架

1.npm init -y // 快速初始化一个项目

2.新建命令行的入口文件 /bin/cli.js

  #! /usr/bin/env node        //用于解释程序的脚本console.log('Hello World!') //为了测试是否正常

3.在package.json中新建bin对象,存放之后需要执行的js文件

  {....,"bin": {"temp-cli": "./bin/cli.js" }....}

4.将npm包链接到全局执行环境: npm link
 Mac电脑: sudo npm link

5.执行 temp-cli 命令
 输出:Hello World!
 
6.cli 工具库简介【安装: cnpm i commander inquirer chalk download-git-repo ora 】

1)commander: 命令行交互工具 [https://github.com/tj/commander.js]

   const program = require('commander');// 获取版本信息program.version(require('../package.json').version);// process.argv: 可以以数组形式获取命令行参数program.parse(process.argv);

命令:temp-cli -h
  Usage: temp-cli [options]
  Options:
   -V, --version output the version number
  -h, --help display help for command

2)inquirer: 交互式命令行工具 [https://github.com/SBoudrias/Inquirer.js]

#!/usr/bin/env node
const program = require('commander');
const inquirer = require('inquirer');
const initAction = () => {inquirer.prompt([{type: 'input',message: '请输入项目名称:',name: 'name'}]).then(answers => {console.log('项目名为:', answers.name);console.log('正在拷贝项目,请稍等')});
}
// 获取版本信息
program.version(require('../package.json').version);
program.command('init').description('创建项目').action(initAction);
// process.argv: 可以以数组形式获取命令行参数
program.parse(process.argv);

3)chalk:美化命令行中输出内容的样式

4)download-git-repo: 下载远程模版

5)ora: 用于显示加载中等待提示 [https://github.com/sindresorhus/ora]

7.指定 git 地址
 生成需要下载指定地址的项目;需要执行 shell 脚本,cnpm i shelljs

......
const initAction = () => {inquirer.prompt(.....).then(answers => {console.log('项目名为:', answers.name);console.log('正在拷贝项目,请稍等');const remote = 'http://gogs.myhexin.com/taojinchao/check_account.git';const curName = 'Dist';const tarName = answers.name;shell.exec(`  git clone ${remote} --depth=1mv ${curName} ${tarName}rm -rf ./${tarName}/.gitcd ${tarName}npm i`, (error, stdout, stderr) => {  if (error) {  console.error(`exec error: ${error}`)  return  }  console.log(`${stdout}`)  console.log(`${stderr}`)  });});
}
  1. 执行 temp-cli init 验证效果

发布到 npm

1.在根目录添加publish.sh

#!/usr/bin/env bash
set -e
# 修改npm源地址
npm config get registry
npm config set registry=https://registry.npmjs.org/
# 登陆输入自己的npm账号和密码,还有邮箱
echo '登录'
npm login
echo "发布中..."
npm publish
# 改回npm源地址,很多时候我们用的是淘宝镜像源
npm config set registry=https://registry.npm.taobao.org
echo -e "\n发布成功\n"
exit

2.执行 sh publish.sh

发布时遇到的问题

一、E426: 镜像源地址写成了http
在这里插入图片描述
二、Enter one-time password from your authenticator app
  npm二次验证:需要输入邮箱的动态密码

三、E426: 包已存在
在这里插入图片描述
验证包是否存在: https://registry.npmjs.org/ xxx

参考地址:从零搭建一个cli工具
     从零构建自己的CLI工具,提高效率
     从 0 构建自己的脚手架/CLI知识体系(万字)

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

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

相关文章

GPT系列:GPT1 -> 2 -> 3 -> InstructGPT ->ChatGPT

2018年6月 GPT-1:【无监督预训练有监督微调】 大量数据(约5GB文本)上无监督训练,然后针对具体任务在小的有监督数据集上做微调; 关键词:“scalable, task-agnostic system”;8个GPU上训练一个月…

【通览一百个大模型】Anthropic LLM(Anthropic)

【通览一百个大模型】Anthropic LLM(Anthropic) 作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大…

chatgpt写小代码的能力很可以

最近做财务报销单时遇到了一点小问题:有11项比较零散的报销单,费用分别是 180 ,160 ,235,260,320,520,375 ,155,255,1050,135元&#…

TTS算法笔记:MusicLM- Generating Music From Text(AI生成音乐)

1. 介绍 摘要: 介绍了一个以文本作为条件,生成高保真、长时间片的音乐音频。比如文本为“由扭曲的吉他重复段伴奏的平静的小提琴旋律”,MusicLM可以可以根据文本条件,生成24kHz采样率,分钟级别的连续音乐音频。 从摘…

神经网络训练中的Tricks之高效BP(反向传播算法)

神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09qq.com http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词。对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此。曾记得&#xf…

Chainlink 预言机的原理解析

本文来自于 8 月19 日 Chainlink 开发者社区中国负责人 Frank ,在 DApp Learning 分享会上对于 Chainlink 预言机的原理的讲解,以下是这节分享会的总结内容。有兴趣的小伙伴可以结合视频一起学习: 为什么区块链无法主动获取外界数据 区块链…

预言机(Oracle)

文章目录 一、概述1.1、为什么需要1.2、应用场景1.3、现有的预言机产品1.4、基本原理 二、蚂蚁区块链 BaaS 平台–外部数据源服务三、主流预言机:Oraclize3.1 使用举例3.2 数据源3.3 收费3.4 真实性:3.5 解析助手3.6 加密查询3.7 原理 四、参考 一、概述…

第147篇 笔记-预言机(Oracle)

定义:区块链预言机是将区块链连接到外部系统的实体,从而使智能合约能够基于现实世界的输入和输出执行。 预言机为分散的 Web3 生态系统提供了一种访问现有数据源、遗留系统和高级计算的方式。去中心化预言机网络(DON)支持创建混合…

语音识别-TDNN

近来在了解卷积神经网络(CNN),后来查到CNN是受语音信号处理中时延神经网络(TDNN)影响而发明的。本篇的大部分内容都来自关于TDNN原始文献【1】的理解和整理。该文写与1989年,在识别"B", "D&…

语音识别技术对比分析

文章目录 一、语音识别产品对比二、百度语音识别产品1、套餐及价格:2、官网3、调研结果 三、华为语音识别产品四、阿里云语音识别产品1、套餐及价格:2、官网地址3、调研结果 五、腾讯云语音识别产品1、套餐及价格2、官网3、调研结果 六、科大讯飞语音识别…

语音识别SpeechRecognition

语音识别 1. 声音的本质是震动,震动的本质是位移关于时间的函数 Signal: s f(t) 波形文件(.wav)中记录了不同采样时刻的位移 2. 通过傅里叶变换 可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建…

各种情人节,程序员教你5个表白代码,牢牢主抓她的心

刚过完年就来到了一个相当重要的节日:情人节。一个有人欢喜有人愁的节日,虽然对一些单身人士不太友好,但还有不少人都在等这个节日进行表白。毕竟这个日子的成功率会高一些。 情人节少不了送花送礼物,作为一个程序员,…

技术创业者必读:从验证想法到技术产品商业化的全方位解析

导语 | 技术创业之路往往充满着挑战和不确定性,对于初入创业领域的人来说,如何验证自己的创业想法是否有空间、如何选择靠谱的投资人、如何将技术产品商业化等问题都需要认真思考和解决。在「TVP 技术夜未眠」第六期直播中,正马软件 CTO、腾讯…

麦肯锡给CEO的元宇宙指南

ChatGPT突然大张旗鼓地登上全球新闻的头条时,元宇宙似乎如明日黄花般过气了,未来渺茫起来。而麦肯锡的4位合伙人在今年1月给全球CEO们的“元宇宙指南”中强调,“太大元宇宙 ,不容忽视”。《元宇宙日爆》编译了这份指南供企业管理者…

AI大模型只能沦为“锦上添花”吗?

出品 | 虎嗅科技组作者 | 齐健编辑 | 廖影头图 | 虎嗅 “每个人咨询的第一个问题都是:你们在大模型方面做了什么?” 7月8日,2023世界人工智能大会(下称WAIC),一位参展商告诉笔者他的感受。——“大模型”&a…

chatgpt赋能python:Python在Win7上的安装教程

Python在Win7上的安装教程 如果你是一名Win7用户,并且打算开始学习或者使用Python编程语言,那么本文将会为你提供一个简单易懂的Python安装教程。 1. 下载Python 在安装Python之前,你需要先去Python的官方网站(https://www.pyt…

chatgpt赋能python:Python安装两个版本详细教程

Python安装两个版本详细教程 Python是一种广泛使用的编程语言,由于不同版本之间的差异,部分开发者需要同时安装两个不同版本的Python。本篇文章将为大家详细介绍Python安装两个版本的方法。 为何需要安装两个不同版本的Python Python的发行版&#xf…

chatgpt赋能python:使用Python编写的程序如何运行

使用Python编写的程序如何运行 Python是一种高级编程语言,适用于多种应用,例如Web开发,数据分析和人工智能。很多人都知道Python是一种很强大的语言,但是他们可能不知道如何运行Python程序。在这篇文章中,我们将介绍P…

chatgpt赋能python:Python程序运行方法介绍

Python 程序运行方法介绍 在 Python 编程中,了解如何运行程序是非常重要的。本篇文章将介绍 Python 中如何运行程序,以及不同的运行方法及其优缺点。作为一名有10年 Python 编程经验的工程师,我相信这篇文章将对 Python 新手和有经验的开发者…

chatgpt赋能python:Python怎么post请求

Python怎么post请求 Python作为一种高级编程语言,拥有丰富的库和模块来处理各种编程任务。其中,处理网络请求和数据交互是Python非常擅长的领域之一。在Python中,我们可以使用标准库或第三方库的HTTP模块来实现HTTP协议的请求和响应。 本篇…