Skip to content

Commit d84c313

Browse files
committed
feat: add npm template support
Add support for using npm packages as templates when creating new projects. This feature allows users to specify custom templates from npm registry with optional version control. Key features: - Support multiple npm template formats (npm:, @scope/package, package-name) - Add --template-version flag for version specification - Implement smart caching mechanism (.temp-templates/) - Support flexible template structures (template/, templates/app/, root) - Isolated installation to prevent workspace conflicts - Export utility functions for downstream projects Example usage: npm create rsbuild@latest my-project -- --template my-template npm create rsbuild@latest my-project -- --template @scope/template npm create rsbuild@latest my-project -- --template my-template --template-version 1.2.3 API exports: - isNpmTemplate() - resolveCustomTemplate() - resolveNpmTemplate() - sanitizeCacheKey() Inspired by sparkling's npm template implementation.
1 parent 6069f60 commit d84c313

3 files changed

Lines changed: 282 additions & 184 deletions

File tree

README.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,65 @@ A shared package for create-rspack, create-rsbuild, create-rspress and create-rs
1717
npm add create-rstack -D
1818
```
1919

20+
## Features
21+
22+
### NPM Template Support
23+
24+
`create-rstack` supports using npm packages as templates, allowing users to create projects from custom templates published to npm.
25+
26+
#### Usage
27+
28+
```bash
29+
# Using npm package name
30+
npm create rsbuild@latest my-project -- --template my-template-package
31+
32+
# Using scoped package
33+
npm create rsbuild@latest my-project -- --template @scope/template-package
34+
35+
# Using explicit npm: prefix
36+
npm create rsbuild@latest my-project -- --template npm:my-template-package
37+
38+
# With specific version
39+
npm create rsbuild@latest my-project -- --template my-template-package --template-version 1.2.3
40+
```
41+
42+
#### Template Package Structure
43+
44+
Your npm template package should have one of the following structures:
45+
46+
```
47+
my-template-package/
48+
├── template/ # Preferred
49+
│ ├── package.json
50+
│ └── src/
51+
├── templates/
52+
│ └── app/ # Alternative
53+
└── (root) # Fallback
54+
├── package.json
55+
└── src/
56+
```
57+
58+
#### Caching Strategy
59+
60+
- Templates with `latest` version are always re-installed to ensure the latest version
61+
- Specific versions are cached in `.temp-templates/` for faster reuse
62+
63+
#### API
64+
65+
```typescript
66+
import {
67+
isNpmTemplate,
68+
resolveCustomTemplate,
69+
resolveNpmTemplate,
70+
} from 'create-rstack';
71+
72+
// Check if template input is an npm package
73+
if (isNpmTemplate(templateInput)) {
74+
// Resolve npm template to local path
75+
const templatePath = resolveCustomTemplate(templateInput, version);
76+
}
77+
```
78+
2079
## Examples
2180

2281
| Project | Link |

0 commit comments

Comments
 (0)