【趣味项目】一键生成LICENSE

【趣味项目】一键生成LICENSE

项目地址:GitHub(最新版本) | GitCode(旧版本)
在这里插入图片描述

项目介绍

一款用于自动生成开源项目协议的工具,可以通过 npm 进行安装后在命令行使用,非常方便

使用方式

npm install @xxhls/get-license -gget-license --license=mit

技术选型

  • typeScript: 支持类型体操
  • chalk: 命令行输出色彩
  • commander: 解析命令行参数
  • fs-extra: 拓展原生 fs 的功能
  • ini: 解析 .gitconfig 为对象
  • parcel: 零配置打包工具

代码分析

在这里插入图片描述

  • bin: 存放可执行文件
  • dist: 存放打包后文件
  • src: 源代码
    • log: 日志显示
    • templates: 协议生成器
    • utils:
      • getConfig: 生成配置文件
      • getYear: 读取当前年份
      • isGitConfigExists: 判断Git配置是否存在
      • question: 命令行交互
    • index.ts: 主函数
  • package.json: npm 包配置文件
  • tsconfig.json: ts 配置文件

思路详解

该部分我会挑选几个代码量相对多一些的文件进行思路解析,具体可以去代码仓库克隆下来查看

配置生成函数

import os from "os";
import ini from "ini";
import path from "path";
import fs from "fs-extra"
import question from "./question";
import { error, info, warn } from "../log";
import isGitconfigExists from "./isGitconfigExists";interface IConfig {name: string;email: string;
}const getConfig = async () => {const config: IConfig = {name: "username",email: "xxx@email.com",};// 检测是否存在 .gitconfig 文件const isExists = isGitconfigExists();if (isExists) {info("检测到 .gitconfig 文件");// 读取配置文件const configPath = path.join(os.homedir(), ".gitconfig");const configStr = fs.readFileSync(configPath, "utf-8");const configTemp = ini.parse(configStr);config.name = configTemp.user.name;config.email = configTemp.user.email;info(`用户名: ${config.name}`);info(`邮箱: ${config.email}`);} else {warn("未检测到 .gitconfig 文件");// 创建配置文件const name = await question("请输入用户名: ");const email = await question("请输入邮箱: ");config.name = name;config.email = email;}return config;
};export default getConfig;
  1. 判断全局 git 是否存在
  2. 若存在,则通过 os.homedir 拼接出路径,读取文件后用 ini 进行解析
  3. 若不存在,则进行命令行交互得到需要的用户名和邮箱

主函数

import fs from "fs-extra";
import getConfig from "./utils/getConfig";
import { info, debug, warn, error } from "./log";
import licenseMap from "./templates";
import { License } from "./templates";
import type { LicenseType } from "./templates";
import { Command } from "commander";const main = async () => {const program = new Command();program.name("get-license").description("Get License").version("0.1.7");program.requiredOption("--license <license>", "Select License").parse(process.argv);const options = program.opts();const { license } = options;if (!license) {error("未选择 License 类型");process.exit(1);} else if (license === "mit" || license === "MIT"){info("成功选择 MIT License");const generator = licenseMap[License.MIT];const config = await getConfig();const licenseStr = generator(config.name, config.email);const licensePath = `${process.cwd()}/LICENSE`;fs.outputFileSync(licensePath, licenseStr);} else {error("未知的 License 类型");process.exit(1);}
};main();
  1. 读取需要的命令行参数 license
  2. 根据 license 匹配相应的协议生成器
  3. 生成配置文件
  4. 将配置传入生成器得到协议
  5. 在当前文件夹创建 LICENSE 并写入协议内容

更新预期

涵盖 Github 支持的全部协议

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

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

相关文章

python的函数与类的定义

目录 1.函数 1.函数的定义 2.输入参数与输出参数的类型 3.输入和输出多个参数 1.普通参数 2.含有任意数量的参数 3.关键字参数 4.普通参数与多个参数的结合 2.类 1.类的定义 2.类的实例化 3.继承 1.函数 1.函数的定义 def 函数名(输入参数): 文档字符串 函数体 …

第七届国际通信与网络工程会议(ICCNE 2024)即将召开!

2024年第七届国际通信与网络工程会议&#xff08;ICCNE 2024&#xff09;将于7月26-28日在越南岘港召开。本次会议由维新大学主办&#xff0c;岘港大学、胡志明市科技大学协办。ICCNE 2024旨在为来自行业和学术界的研究人员、从业者和专业人士提供论坛&#xff0c;分享其最新研…

基于boost库的搜索引擎项目

文章目录 一、项目背景二、什么样的搜索引擎三、搜索引擎的宏观图原理四、Parse模块4.1下载boost库源代码4.2提取boost库中以.html为结尾的文件4.2.1 boost库的简单使用 4.3数据清洗(去标签化)4.3.1数据清洗的具体实现 4.4将清洗后的数据写入到raw.txt文件中 五、正排索引 vs 倒…

C++面试问题收集

0 持续更新中 目录 0 持续更新中 1 C语言相关 1.1 malloc/free和new/delete区别 1.2 内存泄漏 1.3 堆区和栈区的区别 1.4 宏定义和const的区别 1.5 多态 1.6 类中的静态成员变量 2 操作系统相关 2.1 进程和&#xff08;用户&#xff09;线程的区别 2.2 系统调用 2.3…

学习SSM的记录(七)-- SSM整合

目录 SSM整合理解 什么是SSM整合 SSM整合核心问题 1.SSM整合需要几个ioc容器 2.每一个ioc容器对应哪些类型组件 ​编辑 3.ioc容器之间关系和调用方向 4.具体多少配置类以及对应容器关系 5.ioc初始化方式和配置位置 ​编辑 SSM整合配置实战 1.数据库准备 2.创建项目…

十分钟教你有效运用百度检索式

十分钟教你有效运用百度检索式 ​ 百度作为国内最大的搜索引擎网站&#xff0c;虽然很多人都喷它的搜索页面广告太多&#xff0c;但是对于不会科学上网的同学来说&#xff0c;似乎除了继续用百度以外也没有更好的选择。 ​ 其实搜索引擎一般都会内涵一些高级的搜索技巧&#…

中间件漏洞(redis)

目录 1.Redis服务器被挖矿案例 2.redis常见用途 3.redis环境配置 4.redis的持久化机制 5.redis动态修改配置 6.webshell提权案例 7.定时任务bash反弹连接提权案例 8.SSH Key提权案例 9.redis安全加固分析 1.Redis服务器被挖矿案例 我没有体验过&#xff0c;那就看看别…

【Redis】Redis常用命令一

1.keys&#xff1a;返回所有满足条件的key&#xff0c;比如&#xff1a; KEYS pattern时间复杂度&#xff1a;O(N)&#xff0c;返回值&#xff1a;匹配pattern的所有key。 • h?llo 匹配 hello , hallo 和 hxllo • h*llo 匹配 hllo 和 heeeello • h[ae]llo 匹配 hello 和 …

【CSP试题回顾】201709-1-打酱油

CSP-201709-1-打酱油 解题代码 #include<iostream> using namespace std;int n, num;int main() { cin >> n;if (n / 50 ! 0){num 7 * (n / 50);n % 50;}if (n / 30 ! 0){num 4 * (n / 30);n % 30;}if (n / 10 ! 0) num (n / 10);cout << num;return…

Flask 专题

[CISCN2019 总决赛 Day1 Web3]Flask Message Board 查看session解密 但不知道密钥&#xff0c;题目说FLASK,那肯定就是找密钥,发现输入什么都没有显示&#xff0c;只有author那里有回显在版上&#xff0c;所以尝试sstl&#xff0c;{{config}}找到密钥 扫目录发现有admin进入…

6个免费的3D模型网站,助你3D建模渲染不用愁

​随着3D建模和渲染技术的不断发展&#xff0c;其重要性也日益增加。创建新的3D模型往往需要耗费大量时间&#xff0c;因此&#xff0c;本文整理了六个顶尖的免费3D模型资源网站&#xff0c;以便您能够方便地获取3D模型&#xff0c;大幅减少建模时间。这些资源有助于您更快地开…

高铁地铁智慧公厕方案与案例介绍

随着轨道交通的快速发展&#xff0c;高铁、地铁、火车成为人们出行的主要交通工具。而在这种规划建设要求极具的场所&#xff0c;信息化、智慧化的管理系统部署必不可少&#xff0c;智慧公厕作为公共设施的重要组成部分&#xff0c;建设和管理也越来越受到重视。智慧公厕系统的…

elasticsearch(学习笔记)(分布式搜索引擎)(黑马)(kibana操作)

一、索引库操作 索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。 我们要向es中存储数据&#xff0c;必须先创建“库”和“表”。 1、mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数据类型…

自动驾驶最强学习资料

自动驾驶最强学习资料 资料说明和获取方式 本资料包是作者吐血整理的干货&#xff01;目前为止应该是非常全的自动驾驶资料包&#xff01;是作者五年自动驾驶算法工程师的 积累&#xff01; 以上干货资料并不全是作者自己原创&#xff0c; 是作者作为五年自动驾驶算法工程的…

春招_程序员怎么写简历_写简历网站

你们在制作简历时,是不是基本只关注两件事:简历模板,还有基本信息的填写。 当你再次坐下来更新你的简历时,可能会发现自己不自觉地选择了那个“看起来最好看的模板”,填写基本信息,却没有深入思考如何使简历更具吸引力。这其实是一个普遍现象:许多求职者仍停留在传统简历…

c++的类型转换和IO流

类型转换和IO流 一、c语言的类型转换 int i 1; // 隐式类型转换&#xff0c;这些类型都是表示数据的大小&#xff0c;整型家族包括char相互转化是因为他们只是范围不一样&#xff0c;浮点数与整型支持是因为浮点数本质也是表示数据的大小&#xff0c;只是加了精度而已&#…

vscode-server的搭建方法

一、配置服务器端口支持 1、开放端口&#xff1a; 2、关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service二、配置code-server到服务器上** 1、下载code-server-4.22.0-linux-amd64.tar.gz到本地&#xff08;可下载最新的版本&#xff09;&a…

多人语聊房社交APP开发需要有哪些功能呢?

随着移动互联网的快速发展&#xff0c;社交APP已经成为人们日常生活中不可或缺的一部分。而随着语音社交的兴起&#xff0c;多人语聊房社交APP也逐渐受到了用户的青睐。在开发多人语聊房社交APP时&#xff0c;需要具备一系列功能&#xff0c;以满足用户的需求并提供良好的使用体…

Linux的一些常用指令

一、文件中 r w x - 的含义 r&#xff08;read&#xff09;是只读权限&#xff0c; w&#xff08;write&#xff09;是写的权限&#xff0c; x&#xff08;execute&#xff09;是可执行权限&#xff0c; -是没有任何权限。 二、一些指令 # 解压压缩包 tar [-zxvf] 压缩包名…

知名Web3 风险投资公机构Hack VC 四位合伙人将亲临hack.summit()2024亚洲区块链开发者大会

2024-03-14 15:32:24 知名web3风险投资机构Hack VC的四位合伙人——Alex Pack、Ed Roman、Roshun Patel和Rodney Yesep将亲临hack.summit()2024亚洲区块链开发者大会&#xff0c;这一盛事将于2024年4月9日至10日在香港数码港举行。 此次大会由Hack VC主办&#xff0c;并得到Alt…