首页 > 其他分享 >【趣味项目】一键生成LICENSE

【趣味项目】一键生成LICENSE

时间:2024-03-14 19:59:51浏览次数:33  
标签:const LICENSE license 一键 趣味 import config email name

【趣味项目】一键生成LICENSE

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

项目介绍

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

使用方式

npm install @xxhls/get-license -g

get-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: "[email protected]",
    };

    // 检测是否存在 .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 支持的全部协议

标签:const,LICENSE,license,一键,趣味,import,config,email,name
From: https://blog.csdn.net/m0_66681776/article/details/136719833

相关文章

  • 【趣味学算法】04_与谁结婚(逻辑推断|条件组合)
    注:本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正有三对情侣要结婚,假设三位靓仔分别为A、B、C,三位小仙女为X、Y、Z。他们三对情侣比较皮,准备让吃瓜路小由鱼来猜!小由鱼......
  • 喜欢的音乐太多了 占用太多内存让电脑卡顿了怎么办?教你一键压缩 帮你搞定烦恼
    下载了很多音乐,发现真的太占空间了,但是又不舍得删除,该怎么办呢?其实我们可以压缩一下,对于喜欢听歌的小伙伴来说,手机里一定存了很多音乐吧,由于手机的存储空间有限,存的音乐越多,手机可用的空间就越小。为了解决手机里音频文件占用空间过大的问题,我们可以将手机里的音频进行压缩,这样......
  • 【专业揭秘】一键搞定自动点赞关注,提升社交效率的神器来了!
    在数字时代,社交媒体已经成为我们生活的一部分。随之而来的自动化工具也不断涌现,其中自动点赞、自动关注和自动评论工具受到了广泛关注。这类工具通常通过模拟人类用户的行为来增加账户的互动性和可见度。这些自动化工具的工作机制并不复杂。它们通过预设的脚本或算法,自动执行......
  • 一键开启 GPU 闲置模式,基于函数计算低成本部署 Google Gemma 模型服务
    作者:王骜本文介绍如何使用函数计算GPU实例闲置模式低成本、快速的部署GoogleGemma模型服务。背景信息Google在2024年02月21日正式推出了自家的首个开源模型族Gemma,并同时上架了四个大型语言模型,提供了2B和7B两种参数规模的版本,每种都包含了预训练版本(base模......
  • 用Go语言编写的轻量级Web服务器Caddy,一键在Ubuntu安装
    最近在阿贝云试用新的免费服务器,1核1G内存10G磁盘5M带宽,对于学习用还挺不错的。这次想给它试下轻量级Web服务器Caddy。Caddy采用Go编写,以运行简单和安全为目标。它内置HTTPS功能并支持多个后端,例如HTTP或FTP。相比Nginx功能更强大易用。下面来个步骤给Ubuntu服务器装Cadd......
  • 想做漫画的ai短视频伙伴有福了,这个ai免费网站只需要提示词,自动生成故事文本和漫画图,堪
    现在很多人都在做漫画类图文或者短视频,这点高粱seo之前也是提到的,同时也分享过一些免费生成ai漫画的网站,那么今天高粱seo再给大家分享一个非常不错的免费ai网站,只需要输入提示词,就可以一键生成漫画图。那么下面高粱seo就以实操案例给大家分享下吧。这次高粱seo以孙悟空大闹天......
  • 一键开启 GPU 闲置模式,基于函数计算低成本部署Google Gemma 模型服务
    背景信息Google在2024年02月21日正式推出了自家的首个开源模型族Gemma,并同时上架了四个大型语言模型,提供了2B和7B两种参数规模的版本,每种都包含了预训练版本(base模型)和指令微调版本(chat模型)。根据Google的技术报告,本次开源的Gemma在问题回答、合理性、数学、代码......
  • FastGPT接入白菜GPT一键部署教程
     注册会员领取免费API_KEY,内测期间,每天限30名会员免费注册,能注册就能领取API_KEY,无需充值,无需付费,免费使用ChatGPT,支持3.5/4白菜GPT简介白菜GPT旨在提供稳定高效且免费的OpenAIAPI转发服务,帮助国内GPT应用学习相关爱好者及从业者,提供便捷、低成本、长期稳定的GPT中转服......
  • Docker Compose一键搭建安全测试靶场
    1.Docker快速安装1.1.ubuntu系统步骤一:安装必要的一些系统工具sudoapt-getupdatesudoapt-get-yinstallapt-transport-httpsca-certificatescurlsoftware-properties-common步骤二:安装GPG证书curl-fsSLhttps://mirrors.aliyun.com/docker-ce/linux/ubuntu/gp......
  • 一键Run带你体验扩散模型的魅力
    本文分享自华为云社区《爆圈Sora横空出世,AGI通用人工智能时代真的要来了吗?一键Run带你体验扩散模型的魅力!》,作者:码上开花_Lancer。Sora这几天的爆炸性新闻,让所有人工智能相关从业者及对应用感兴趣的人群都感到沸腾,震撼到央视也在进行相关的讨论,简直可以和2023年初ChatGPT讨论带......