如何开发一个项目脚手架cli

目录

  • 背景
    • 正文
      • unbuild
      • prompts
      • progress
      • kolorist
    • 设置打包命令
      • npm exec
      • npx
      • npm init/ npm create/ npm innit
    • 使用
    • 最后

背景

随着团队项目类型越来越多,方便后续快速去开发项目,会出现各种类型的项目模版项目。

在这里插入图片描述
这样开发只需要通过脚手架选择自己需要的项目类型,不需要去记住各个项目的代码仓库地址。

代码地址:https://github.com/duKD/create-editor-cli

正文

需要用到以下几个第三方库:

unbuild

一款轻量打包工具 默认支持ts , 可以输出 esModule commonjs 类型代码

prompts

用于终端命令行交互

progress

进度条

kolorist

优化字体显示样式

设置打包命令

{"name": "create-editor-cli","private": false,"version": "1.1.0","description": "",// 在packjosn 文件中 设置打包命令 最终会被打包到 node_module 的 bin 目录下 "bin": {"create-editor-cli": "dist/index.cjs","cec": "dist/index.cjs"},...}

在这里插入图片描述
复习下 : 如何去使用 .bin 目录下的命令

  1. 全局安装的话 可以直接使用 cec 和 create-editor-cli
  2. 局部安装 的话 需要 在 packjson 的 script 中使用 或者 npx cec ,npx create-editor-cli

设计 更简单的使用方式

npm exec

npm exec 的执行流程

  • 在本地查找是否有对应的npm包
    • 若找到,则运行这个包的package.json中bin字段对应的可执行文件
    • 若未找到,在远程npm仓库查找是否有对应的npm包 若找到,加载完成后,再运行这个包package.json中bin字段对应的可执行文件

npx

直接 npx exec 和上面是一个效果

npm init/ npm create/ npm innit

npm init xxx | npm create xxx 等价于 npx exec create-xxx

得出结论 当我们的包发到远程仓库时 可以直接 使用

npm create editor-cli 来创建项目

使用

pnpm create editor-cli 来初始化

 ~ % pnpm create editor-cli
Library/pnpm/store/v3/tmp/dlx-59954      | Progress: resolved 1, reused 0, downlLibrary/pnpm/store/v3/tmp/dlx-59954      |   +1 +
Library/pnpm/store/v3/tmp/dlx-59954      | Progress: resolved 1, reused 0, downlLibrary/pnpm/store/v3/tmp/dlx-59954      | Progress: resolved 1, reused 0, downlLibrary/pnpm/store/v3/tmp/dlx-59954      | Progress: resolved 1, reused 0, downloaded 1, added 1, done
✔ 选择编辑器版本? › vue
✔ 输入项目名称 … my-editor
开始下载模版...
========================================================================== 100%下载完成,开始解压...解压完成...

最后

由于私密安全问题 只提供了一个简单的实现思路 ,可以按照这个思路 ,去定制化开发属于自己公司的脚手架。

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

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

相关文章

Mybatis是如何进行分页的

MyBatis 也提供了支持分页的方案,其主要思路是使用 Limit 偏移量和限制个数,来获取指定数量的数据 MyBatis 提供两种分页方式:基于参数改造和基于插件拦截 1、基于参数改造: 第一种分页方式是基于参数改造的,通过添加…

示例:推荐一个自定义的Ribbon皮肤

一、目的:WPF自带的Ribbon控件功能很强大,但使用过程中感觉显示的样式不是很好,或者不适合自己的项目,下面介绍一个基于自带Ribbon控件样式的修改,主要修改了些高度,间距,背景色,前景…

【漏洞复现】AJ-Report开源数据大屏 verification;swagger-ui RCE漏洞

0x01 产品简介 AJ-Report是一个完全开源的B平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。多数据源支持,内置mysql、elasticsearch、kudu等多种驱动,支持自定义数据集省去数据接口开发&#xff…

Spring Cloud Ribbon 介绍

目录 一、Spring Cloud Ribbon简介二、Ribbon 负载均衡策略三、Ribbon 加载机制四、Ribbon的工作原理五、Ribbon的配置和使用六、Ribbon的作用和优势 一、Spring Cloud Ribbon简介 Spring Cloud Ribbon是一个基于Netflix Ribbon实现的客户端负载均衡器。它运行在消费者端&…

什么是APP分发-了解APP分发的核心概念

APP分发的定义和意义 大家有没有过这样的经历:辛辛苦苦开发了一款APP,却不知道该怎么让更多人知道和使用?APP分发的重要性就凸显出来了。APP分发就是将你的应用推送到不同的应用市场和平台,让更多用户能够下载和使用。 小猪app封…

Python的pip切换国内源

📚目录 起因:pip切换国内源:操作永久修改pip配置文件测试永久源配置是否成功 pip其他环境的配置永久源配置 起因: pyCharm安装模块的手出现ModuleNotFoundError: No module named distutils 由于使用pip install distutils下载不了…

[图解]建模相关的基础知识-16

1 00:00:00,350 --> 00:00:04,130 刚才那个,就相当于,12这个我们可以认为是什么 2 00:00:05,020 --> 00:00:11,360 我们用类图来表达就是,员工、电话 3 00:00:13,320 --> 00:00:15,080 多个 4 00:00:15,090 --> 00:00:16,440 …

Python与Java实现SM2互调

文章目录 一、项目背景二、环境极其依赖三、具体功能1.Python生成密钥对2.java生成密钥对3.Python加签验签4.java加签验签 四、遇到的问题五、解决方案 一、项目背景 Python对接Java接口互相SM2加签验签 二、环境极其依赖 python环境 pip3 install gmssljava环境 <depen…

docker的隔离机制

linux内核带来的便利 Linux 内核是 Docker 实现隔离的基础。作为操作系统的核心,Linux 内核提供了许多用于资源隔离和安全性的关键机制,为 Docker 容器化技术提供了基础支持。 Namespaces Linux 内核自 2.6.24 版本开始引入了命名空间(Namespaces)机制。Namespaces 为进程提…

数据库的ACID是通过什么保证的

1、原子性&#xff08;Atomicity&#xff09; 通过日志&#xff08;Logging&#xff09;来记录所有对数据库的修改。如果事务中的某个操作失败&#xff0c;系统可以回滚&#xff08;Rollback&#xff09;到事务开始前的状态&#xff0c;撤销所有已执行的修改。 使用写前日志&…

100多个ChatGPT指令提示词分享

当前&#xff0c;ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而&#xff0c;并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令人惊叹的ChatGPT指令提示词&#xff0c;可以提升您与ChatG…

MySQL中的case表达式

case 表达式 & case 语句 假如我们有一张表名为 employees &#xff0c;如下所示&#xff1a; -------------------------------------------------------------------------------- | employee_id | first_name | last_name | department_id | salary | hire_date | g…

Linux Ubuntu 24.04制作可用systemctl操控的service

在/etc/systemd/system/目录下创建一个新的<your_service_name>.service文件&#xff0c;例如buda.service&#xff0c;里面填入以下内容&#xff1a; (特别要注意设置WorkingDirectory, 这将决定exe程序中的相对路径的解析结果。) [Unit] Descriptionbuda website ser…

智能优化算法改进策略之局部搜索算子(七)--自适应模式搜索法

1、原理介绍 模式搜索法[1]是Hooke与Jeeves提出的一种直接搜索算法&#xff0c;其目的是通过比较目标函数在有限点集中的函数值来优化目标函数。更重要的是&#xff0c;它不仅不使用任何导数知识&#xff0c;而且不需要隐式地建立任何一种导数近似。 在这种直接搜索技术中&…

【大数据 复习】第3章 分布式文件系统HDFS(重中之重)

一、概念 1.分布式文件系统把文件分布存储到多个计算机节点上&#xff0c;通过网络实现、文件在多台主机上进行分布式存储的文件系统。&#xff08;就是你的电脑存a&#xff0c;我的电脑存pple&#xff09; 2.降低了硬件开销: 与之前使用多个处理器和专用高级硬件的并行化处理装…

YOLOv8中是如何实现类似将结构体作为函数参数传递

YOLOv8中是如何实现类似将结构体作为函数参数传递 flyfish 实现类似将结构体作为函数参数传递可以有多种方式 可以使用类&#xff08;class&#xff09;来定义一个类似结构体&#xff08;struct&#xff09;的数据结构&#xff0c;然后将其作为函数参数传递 class MyStruct…

CLIP-ReID代码解读七——model.py上

Bottleneck模块 首先定义了一个名为 Bottleneck 的 PyTorch 模块&#xff0c;它是 ResNet 架构中的一个瓶颈块&#xff08;Bottleneck Block&#xff09;。瓶颈块是 ResNet 中常用的一种层次结构&#xff0c;用于构建更深的网络。以下是对这段代码的详细注释&#xff1a; 类定…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-30`Kaggle`竞赛:图片分类

30Kaggle竞赛&#xff1a;图片分类 **比赛链接&#xff1a;**https://www.kaggle.com/c/classify-leaves 导入包 import torch import torchvision from torch.utils.data import Dataset, DataLoader from torchvision import transforms import numpy as np import pandas…

pytest测试框架flaky插件重试失败用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件flaky &#xff0c;用于在测试用例失败时自动重新运行这些测试用例。与前面文章介绍的插件pytest-rerunfailures功能有些类似&#xff0c;但是功能上不如pytest-rerunfailures插件丰富。 flaky官方并没有明确pyt…

【FFmpeg】AVCodecContext结构体

【FFmpeg】AVCodecContext结构体 1. AVCodecContext的定义1.1 struct AVCodecInternal *internal1.1.1 struct FramePool *pool 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVCodecContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库…