giget完全指南:从安装到高级用法的终极教程
2026/8/7 19:08:58 网站建设 项目流程

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方式进行快速克隆,无需依赖本地的gittar命令,提高了克隆效率和稳定性。
  • ✨ 缓存支持:支持在线和离线模式,通过磁盘缓存功能,在离线时也能使用已缓存的模板。
  • ✨ 自定义模板提供商:支持自定义模板提供商,可通过编程方式扩展其功能。

快速安装giget

安装giget非常简单,你可以通过以下几种方式进行安装:

使用npx直接运行

如果你只是想临时使用giget,无需安装,可直接通过npx运行:

npx giget@latest <template> [<dir>] [...options]

全局安装

如果你需要频繁使用giget,建议进行全局安装:

npm安装

npm install -g giget

yarn安装

yarn global add giget

pnpm安装

pnpm add -g giget

CLI模式基础用法

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私有仓库访问,你需要授予ContentsMetadata仓库权限。

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:(字符串)可以是githubgitlabbitbucketsourcehutgit。默认是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也可以是返回ReadableReadableStream的函数:

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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询