Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Support for GitLab, Bitbucket remote templates

未关闭
#3,033 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
62/100
Issue 类型
功能
描述清晰度
描述清楚
活跃度
活跃
技术栈
git, typescript
领域
cli

调研方向

Start in packages/cli/src/create/discovery.ts, where isGitHubUrl, parseGitHubUrl and discoverTemplate decide whether input goes to degit, then check the remote.ts hint and the expandCreateShorthand skip. Read the GitHub cases in packages/cli/src/create/tests/discovery.spec.ts first. Done when gitlab:, gitlab.com and bitbucket forms route to degit with the host kept, existing GitHub tests still pass, and new spec cases cover them.

由索引模型根据 Issue 内容生成。

描述

pending triage
Description

As a developer using Vite+ with GitLab, I want vp create to scaffold from templates hosted on GitLab (gitlab.com or self-hosted), so my team can share project templates the same way GitHub users can.

Current behavior (vp v1.1.0)

GitHub works:

$ vp create github:nkzw-tech/fate-template --no-interactive
◇ Scaffolded fate-template
→ Next: cd fate-template && vp run

GitLab, the same public repo in both forms, fails:

$ vp create gitlab:gitlab-org/project-templates/express --no-interactive
◇  Generating project…
■  Template "gitlab:gitlab-org/project-templates/express" not found on npm. Run
   vp create --list to see available templates.

$ vp create https://gitlab.com/gitlab-org/project-templates/express --no-interactive
◇  Generating project…
■  Template "https://gitlab.com/gitlab-org/project-templates/express" not found
   on npm. Run vp create --list to see available templates.

The input isn't recognized as a remote template, so it falls through to the npm package lookup.

Why it matters
  • Many teams, especially companies, host code on GitLab (often self-hosted), not GitHub.
  • Vite+ already supports GitLab on the CI side (setup-vp GitLab template, GitLab CI/CD guide). Scaffolding is the missing piece of that flow.
  • vp create already uses degit for remote templates, and degit already supports these hosts. With degit 3.10.0 directly, both commands above work:
$ pnpm dlx [email protected] gitlab:gitlab-org/project-templates/express out-nested
> cloned gitlab-org/project-templates/express#HEAD to out-nested

$ pnpm dlx [email protected] https://gitlab.com/gitlab-org/gitlab-runner-docker-cleanup out-url
> cloned gitlab-org/gitlab-runner-docker-cleanup#HEAD to out-url

So only the template detection in Vite+ is GitHub-only.

Suggested solution
Where the limit is

packages/cli/src/create/discovery.ts (on main):

  • isGitHubUrl() (L12): only matches github:, https://github.com/ and github.com/.
  • parseGitHubUrl() (L21): reduces input to bare user/repo. Fine for GitHub (degit's default host), but it drops the host prefix degit needs for anything else. The URL regex github\.com\/([^/]+\/[^/]+) would also cut GitLab nested groups (group/subgroup/repo).
  • discoverTemplate() (L133): only routes to degit when isGitHubUrl() is true. Everything else falls through to the npm lookup, which gives the "not found on npm" error above.

Related spots:

  • packages/cli/src/create/bin.ts (L597): uses isGitHubUrl / inferGitHubRepoName to infer the target directory.
  • packages/cli/src/create/templates/remote.ts: isGitHubTemplate = command === 'degit' (L26), and the error hint says "Make sure the GitHub repository exists" (L72).
  • expandCreateShorthand() (L234): already skips inputs containing :, so gitlab: and https://gitlab.com/... are safe there. Bare forms like git.sr.ht/user/repo would still need an explicit skip.
What degit already supports (degit 3.10, docs/USAGE.md)
Host Forms
GitLab gitlab:user/repo, https://gitlab.com/user/repo, [email protected]:user/repo
Self-hosted GitLab gitlab://git.example.com/user/repo
Bitbucket bitbucket:user/repo, https://bitbucket.org/user/repo, [email protected]:user/repo
Sourcehut git.sr.ht/user/repo, https://git.sr.ht/user/repo, [email protected]:user/repo

It also handles GitLab nested groups, #ref (branch/tag/commit), and private repos over SSH.

Proposed change
  1. Make the GitHub-only helpers generic (e.g. isRemoteGitTemplate, toDegitSource, inferRemoteRepoName), or extend the existing ones.
  2. Detection: also match gitlab:, gitlab://, gitlab.com/, bitbucket:, bitbucket.org/, git.sr.ht/ and git@<host>: forms.
  3. Source passed to degit:
    • GitHub: keep the current behavior (bare user/repo), so nothing changes for existing users.
    • Other hosts: pass the input through as-is, keeping the host. degit already parses these forms, so Vite+ doesn't need its own parser, and nested groups and #ref keep working.
  4. Repo name inference (default target dir): last path segment, without .git or #ref.
  5. expandCreateShorthand(): explicitly skip bare host forms like git.sr.ht/user/repo.
  6. remote.ts error hint: "repository" instead of "GitHub repository", and mention SSH access for private / self-hosted repos.
Tests

packages/cli/src/create/__tests__/discovery.spec.ts:

  • GitHub template helpers (L275): add detection, degit source and repo-name cases for GitLab (shorthand, URL, .git), self-hosted GitLab, a nested group and Bitbucket.
  • should not expand GitHub URLs (L248): add the new forms.
  • discoverTemplate (degit test near L290): add a GitLab case checking command === 'degit' and that the host is kept in args[0].
  • Keep the existing GitHub cases unchanged as a regression guard.
Docs

docs/guide/create.md: update "Template Sources" and the "Use remote templates" examples:

vp create gitlab:user/repo
vp create https://gitlab.com/group/subgroup/repo
vp create gitlab://git.example.com/user/repo
vp create bitbucket:user/repo
Alternative

Workarounds today. Both skip what vp create adds on top (agent files, editor config, hooks, package manager setup):

pnpm dlx degit gitlab:user/repo my-app
cd my-app && vp install

or

git clone --depth 1 https://gitlab.com/user/repo.git my-app

then remove my-app/.git and run vp install.

A smaller first step could be GitLab only (gitlab:, gitlab.com/ and gitlab://), since that's likely where most non-GitHub demand is.

Additional context
  • Reproduced with vp v1.1.0 (current npm latest). The same GitHub-only detection is in discovery.ts on main and on release/v1.2.0
  • No existing issue or PR found (searched "gitlab", "degit", "remote template")
  • degit host support: https://github.com/Rich-Harris/degit/blob/master/docs/USAGE.md
  • Related GitLab work in Vite+: #1920, #2239, #2258, #2520
  • Side note: the current error ("not found on npm") is misleading for git URLs. Even without full support, detecting a non-GitHub git host and saying "only GitHub remote templates are supported" would help
Validations
  • Read the Contributing Guidelines.
  • Confirm this request is for Vite+ itself and not for Vite, Vitest, tsdown, Rolldown, or Oxc.
  • Check that there isn't already an issue requesting the same feature.
主要语言
Rust
星标
6k
派生
274
平均合并
1 天 11 小时
30 天内合并 PR
203

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

voidzero-dev/vite-plus 的其他 Issue

查看 voidzero-dev/vite-plus 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。