Support shorthand scoped templates (#8298)

This commit is contained in:
Kai Hao
2020-01-12 20:07:07 +08:00
committed by Brody McKee
parent c03bb366e0
commit fa85f030de
2 changed files with 21 additions and 4 deletions

View File

@@ -9,6 +9,8 @@ Custom Templates enable you to select a template to create your project from, wh
You'll notice that Custom Templates are always named in the format `cra-template-[template-name]`, however you only need to provide the `[template-name]` to the creation command.
Scoped templates are also supported, under the name `@[scope-name]/cra-template` or `@[scope-name]/cra-template-[template-name]`, which can be installed via `@[scope]` and `@[scope]/[template-name]` respectively.
### npm
```sh

View File

@@ -640,10 +640,25 @@ function getTemplateInstallPackage(template, originalDirectory) {
const scope = packageMatch[1] || '';
const templateName = packageMatch[2];
const name = templateName.startsWith(templateToInstall)
? templateName
: `${templateToInstall}-${templateName}`;
templateToInstall = `${scope}${name}`;
if (
templateName === templateToInstall ||
templateName.startsWith(`${templateToInstall}-`)
) {
// Covers:
// - cra-template
// - @SCOPE/cra-template
// - cra-template-NAME
// - @SCOPE/cra-template-NAME
templateToInstall = `${scope}${templateName}`;
} else if (templateName.startsWith('@')) {
// Covers using @SCOPE only
templateToInstall = `${templateName}/${templateToInstall}`;
} else {
// Covers templates without the `cra-template` prefix:
// - NAME
// - @SCOPE/NAME
templateToInstall = `${scope}${templateToInstall}-${templateName}`;
}
}
}