giget完全指南:从安装到高级用法的终极教程
【免费下载链接】giget✨ Download templates and git repositories with pleasure!项目地址: https://gitcode.com/gh_mirrors/gi/giget
giget是一款功能强大的模板和Git仓库下载工具,它能让你轻松下载各种模板和Git仓库,支持多种流行的Git提供商,并且具有零依赖、缓存支持等特性。无论你是新手还是有经验的开发者,都能通过本教程快速掌握giget的使用方法。
为什么选择giget?
giget作为一款现代化的模板下载工具,具有以下显著优势:
- ✨ 零依赖:无需安装额外的依赖,即可直接使用,大大简化了使用流程。
- ✨ 多Git提供商支持:内置支持GitHub、GitLab、Bitbucket、Sourcehut等主流Git提供商,满足不同用户的需求。
- ✨ 高效克隆:采用tarball gzip方式进行快速克隆,无需依赖本地的
git和tar命令,提高了克隆效率和稳定性。 - ✨ 缓存支持:支持在线和离线模式,通过磁盘缓存功能,在离线时也能使用已缓存的模板。
- ✨ 自定义模板提供商:支持自定义模板提供商,可通过编程方式扩展其功能。
快速安装giget
安装giget非常简单,你可以通过以下几种方式进行安装:
使用npx直接运行
如果你只是想临时使用giget,无需安装,可直接通过npx运行:
npx giget@latest <template> [<dir>] [...options]全局安装
如果你需要频繁使用giget,建议进行全局安装:
npm安装:
npm install -g gigetyarn安装:
yarn global add gigetpnpm安装:
pnpm add -g gigetCLI模式基础用法
giget的CLI模式使用简单直观,基本语法如下:
giget <template> [<dir>] [...options]基本参数说明
- template:模板名称或描述提供商、仓库、子目录和分支/引用的URI。
- dir:提取模板的相对或绝对路径。
常用选项
--force:即使目录已存在,也强制克隆到该目录。--offline:不尝试下载,仅使用缓存版本。--prefer-offline:如果缓存存在则使用缓存,否则尝试下载。--force-clean:克隆前递归删除任何现有目录或文件(⚠️ 谨慎使用)。--registry:自定义注册表的URL(可通过GIGET_REGISTRY环境变量覆盖)。--auth:用于下载模板的自定义授权令牌(可通过GIGET_AUTH环境变量覆盖)。--install:克隆后使用unjs/nypm安装依赖。
实用示例
从giget模板注册表克隆nuxt starter:
giget nuxt克隆github.com/unjs/template的main分支到unjs-template目录:
giget gh:unjs/template克隆到指定目录myProject:
giget gh:unjs/template myProject克隆dev分支:
giget gh:unjs/template#dev克隆main分支下的/test目录:
giget gh:unjs/template/test从GitLab克隆:
giget gitlab:unjs/template从Bitbucket克隆:
giget bitbucket:unjs/template模板注册表详解
giget拥有内置的HTTP注册表系统,用于解析模板,支持模板名称快捷方式和元数据。默认注册表来自unjs/giget/templates目录。
自定义注册表
自定义注册表应提供一个带有动态路径/:template.json的端点,返回一个JSON响应,包含与自定义提供程序相同的键:
name:(必填)模板名称。tar:(必填)tar下载链接。defaultDir:(可选)默认克隆目录。url:(可选)模板的网页。subdir:(可选)tar文件内的目录。headers:(可选)下载模板时发送的自定义头。
由于其简单性,你甚至可以使用GitHub仓库作为模板注册表,也可以构建自己的API来实现更强大的功能。
高级用法:Git Clone Provider
git:提供程序使用本地git命令克隆存储库,而不是通过HTTP API下载tarball。适用于不公开tarball端点的私有或自托管服务器。
基本用法示例
git:unjs/template # HTTPS克隆(默认github.com) git:unjs/template#v2 # 特定分支或标签 git:unjs/template#e24616c # 特定提交(完整克隆回退) git:unjs/template#main:src # 子目录(稀疏检出) git:git@github.com:unjs/template # 显式SSH git:./path/to/local/repo # 本地存储库 gh+git:unjs/template # 主机简写(github.com) gitlab+git:org/repo # 主机简写(gitlab.com)子目录使用稀疏检出和--filter=blob:none来避免下载完整存储库。
环境变量
| 变量 | 描述 |
|---|---|
GIGET_GIT_HOST | 默认HTTPS主机(默认:https://github.com/) |
私有仓库访问设置
对于私有仓库和资源,你可能需要令牌。通过CLI,你可以使用--auth选项;通过编程API,使用auth选项;在两种模式下,还可以使用GIGET_AUTH环境变量来设置令牌。默认情况下,该值将设置在Authorization: Bearer ...头中。
注意:对于使用细粒度访问令牌的GitHub私有仓库访问,你需要授予Contents和Metadata仓库权限。
GitHub Actions中使用
如果你的项目依赖于私有GitHub仓库,需要将访问令牌添加为密钥。在工作流中,按以下示例引用令牌:
- name: Install packages run: npm ci env: GIGET_AUTH: ${{ secrets.GIGET_AUTH }}程序matic用法
除了CLI模式,giget还支持程序matic用法,让你可以在自己的代码中集成giget的功能。
安装依赖
# npm npm install giget # yarn yarn install giget # pnpm pnpm install giget导入模块
ESM:
import { downloadTemplate } from "giget";CommonJS:
const { downloadTemplate } = require("giget");downloadTemplate函数
示例:
const { source, dir } = await downloadTemplate("github:unjs/template");选项:
source:(字符串)输入源,格式为[provider]:repo[/subpath][#ref]。当仓库路径有多个段时(例如GitLab子组),使用::分隔仓库和子目录:[provider]:group/subgroup/repo[::subdir][#ref]。options:(对象)选项通常从输入字符串推断,你也可以自定义它们。dir:(字符串)克隆到的目标目录。如果未提供,将使用相对于当前目录的user-name。provider:(字符串)可以是github、gitlab、bitbucket、sourcehut或git。默认是github。force:(布尔值)即使目录已存在,也提取到该目录。forceClean:(布尔值)克隆前清理任何现有目录或文件(⚠️ 谨慎使用)。offline:(布尔值)不尝试下载,仅使用缓存版本。preferOffline:(布尔值)如果缓存存在则使用缓存,否则尝试下载。providers:(对象)从提供程序名称到自定义提供程序的映射。也可用于覆盖内置提供程序。registry:(字符串或false)设置为false以禁用注册表。设置为URL字符串(不带尾随斜杠)以使用自定义注册表(可通过GIGET_REGISTRY环境变量覆盖)。cwd:(字符串)用于解析目录的当前工作目录。auth:(字符串)用于下载模板的自定义授权令牌(可通过GIGET_AUTH环境变量覆盖)。ignore:(数组或函数)提取时忽略文件。可以是要跳过的glob模式数组,使用path.matchesGlob匹配(ignore: ["pnpm-lock.yaml", "*.md"]),或者是一个接收每个条目的相对路径(应用subdir后)的回调,返回true跳过,返回false保留(ignore: (path) => path === "pnpm-lock.yaml")。模式需要Node.js >= v22.5.0或v20.17.0。
返回值:
返回一个解析为已解析模板的Promise。
dir:(字符串)提取目录的路径。source:(字符串)输入源的规范化版本,不带提供程序。- [其他提供程序模板键]
url:(字符串)可在浏览器中打开的存储库URL,用于日志记录。
自定义模板提供程序
通过程序matic方法,你可以创建自己的自定义模板提供程序。
基本示例
import type { TemplateProvider } from "giget"; const rainbow: TemplateProvider = async (input, { auth }) => { return { name: "rainbow", version: input, headers: { authorization: auth }, url: `https://rainbow.template/?variant=${input}`, tar: `https://rainbow.template/dl/rainbow.${input}.tar.gz`, }; }; const { source, dir } = await downloadTemplate("rainbow:one", { providers: { rainbow }, });tar也可以是返回Readable或ReadableStream的函数:
const myorg: TemplateProvider = async (input, { auth }) => { return { name: input, tar: async () => (await fetch(`http://my-org.internal/archive/${input}.tar.gz`)).body!, }; }; const { source, dir } = await downloadTemplate("myorg:my-project", { providers: { myorg }, });自定义注册表提供程序
你可以使用registryProvider工具定义其他自定义注册表提供程序并注册到providers。
import { registryProvider } from "giget"; const themes = registryProvider("https://raw.githubusercontent.com/unjs/giget/main/templates"); const { source, dir } = await downloadTemplate("themes:test", { providers: { themes }, });总结
giget是一款功能丰富、使用便捷的模板和Git仓库下载工具,无论是通过CLI快速使用,还是在代码中进行程序matic调用,都能满足你的需求。它支持多种Git提供商、自定义模板和注册表,以及私有仓库访问,为开发者提供了极大的便利。
通过本教程,你已经了解了giget的安装方法、基本用法、高级特性以及程序matic用法。现在,你可以开始使用giget来加速你的开发工作流程了!
如果你想深入了解giget的更多细节,可以查看项目的源代码和相关文档,也可以参与到项目的开发中,为其贡献力量。
【免费下载链接】giget✨ Download templates and git repositories with pleasure!项目地址: https://gitcode.com/gh_mirrors/gi/giget
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考