Support for GitLab, Bitbucket remote templates
维护者通常 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 内容生成。
描述
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-vpGitLab template, GitLab CI/CD guide). Scaffolding is the missing piece of that flow. vp createalready usesdegitfor 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 matchesgithub:,https://github.com/andgithub.com/.parseGitHubUrl()(L21): reduces input to bareuser/repo. Fine for GitHub (degit's default host), but it drops the host prefix degit needs for anything else. The URL regexgithub\.com\/([^/]+\/[^/]+)would also cut GitLab nested groups (group/subgroup/repo).discoverTemplate()(L133): only routes todegitwhenisGitHubUrl()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): usesisGitHubUrl/inferGitHubRepoNameto 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:, sogitlab:andhttps://gitlab.com/...are safe there. Bare forms likegit.sr.ht/user/repowould 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
- Make the GitHub-only helpers generic (e.g.
isRemoteGitTemplate,toDegitSource,inferRemoteRepoName), or extend the existing ones. - Detection: also match
gitlab:,gitlab://,gitlab.com/,bitbucket:,bitbucket.org/,git.sr.ht/andgit@<host>:forms. - 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
#refkeep working.
- GitHub: keep the current behavior (bare
- Repo name inference (default target dir): last path segment, without
.gitor#ref. expandCreateShorthand(): explicitly skip bare host forms likegit.sr.ht/user/repo.remote.tserror 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 checkingcommand === 'degit'and that the host is kept inargs[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 indiscovery.tsonmainand onrelease/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
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
voidzero-dev/vite-plus 的其他 Issue
-
`npx --package=vite-plus vp create` fails with exit 127 when npm is the chosen package manager可能已有人在做 @Crimson341 于 2 天前认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 70/100
voidzero-dev/vite-plus#2970 ·
维护者通常 1 天内回复
-
pending triage
难度 2/5 1-3 小时 新手友好度 72/100
voidzero-dev/vite-plus#2882 · 2 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 62/100
voidzero-dev/vite-plus#2097 · 10 条评论 · 2 个 reaction ·
维护者通常 1 天内回复
-
Support npm dist-tags in `vp env pin` (e.g. `pnpm@latest-10`)可能已有人在做 @liangmiQwQ 今天认领。 未关闭enhancement
voidzero-dev/vite-plus#3034 · 2 个 reaction · 已指派 1 人 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 45/100
voidzero-dev/vite-plus#3031 ·
维护者通常 1 天内回复
查看 voidzero-dev/vite-plus 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
cmlarsen/writemorebetter#158 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 72/100
-
state:triage-needed
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
scanaislop/aislop#482 ·
维护者通常 1 天内回复
-
docs(skills): issue-first should reference an existing Linear ticket instead of filing a duplicate未关闭documentation
难度 1/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复