From 44f10844de1e1172ff8a77608e1c2f07ac82d6de Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 18 Oct 2026 09:28:12 +0800 Subject: [PATCH] feat(create-rstack): add pnpm workspace template --- packages/create-rstack/README.md | 1 + packages/create-rstack/src/index.ts | 6 ++-- .../create-rstack/template-pnpm/README.md | 33 +++++++++++++++++++ .../template-pnpm/apps/web/package.json | 26 +++++++++++++++ .../template-pnpm/apps/web/rstack.config.ts | 13 ++++++++ .../template-pnpm/apps/web/src/App.tsx | 17 ++++++++++ .../template-pnpm/apps/web/src/index.css | 27 +++++++++++++++ .../template-pnpm/apps/web/src/index.tsx | 13 ++++++++ .../template-pnpm/apps/web/tests/app.test.tsx | 11 +++++++ .../apps/web/tests/rstest.setup.ts | 4 +++ .../apps/web/tests/tsconfig.json | 7 ++++ .../template-pnpm/apps/web/tsconfig.json | 4 +++ .../create-rstack/template-pnpm/gitignore | 13 ++++++++ .../create-rstack/template-pnpm/package.json | 19 +++++++++++ .../template-pnpm/packages/ui/package.json | 30 +++++++++++++++++ .../packages/ui/rstack.config.ts | 20 +++++++++++ .../template-pnpm/packages/ui/src/button.tsx | 8 +++++ .../packages/ui/tests/button.test.tsx | 18 ++++++++++ .../packages/ui/tests/rstest.setup.ts | 4 +++ .../packages/ui/tests/tsconfig.json | 8 +++++ .../template-pnpm/packages/ui/tsconfig.json | 7 ++++ .../template-pnpm/pnpm-workspace.yaml | 3 ++ .../template-pnpm/rstack.config.ts | 29 ++++++++++++++++ .../template-pnpm/tsconfig.base.json | 22 +++++++++++++ packages/create-rstack/tests/create.test.ts | 8 +++-- website/docs/en/guide/quick-start.mdx | 4 +-- website/docs/zh/guide/quick-start.mdx | 4 +-- 27 files changed, 350 insertions(+), 9 deletions(-) create mode 100644 packages/create-rstack/template-pnpm/README.md create mode 100644 packages/create-rstack/template-pnpm/apps/web/package.json create mode 100644 packages/create-rstack/template-pnpm/apps/web/rstack.config.ts create mode 100644 packages/create-rstack/template-pnpm/apps/web/src/App.tsx create mode 100644 packages/create-rstack/template-pnpm/apps/web/src/index.css create mode 100644 packages/create-rstack/template-pnpm/apps/web/src/index.tsx create mode 100644 packages/create-rstack/template-pnpm/apps/web/tests/app.test.tsx create mode 100644 packages/create-rstack/template-pnpm/apps/web/tests/rstest.setup.ts create mode 100644 packages/create-rstack/template-pnpm/apps/web/tests/tsconfig.json create mode 100644 packages/create-rstack/template-pnpm/apps/web/tsconfig.json create mode 100644 packages/create-rstack/template-pnpm/gitignore create mode 100644 packages/create-rstack/template-pnpm/package.json create mode 100644 packages/create-rstack/template-pnpm/packages/ui/package.json create mode 100644 packages/create-rstack/template-pnpm/packages/ui/rstack.config.ts create mode 100644 packages/create-rstack/template-pnpm/packages/ui/src/button.tsx create mode 100644 packages/create-rstack/template-pnpm/packages/ui/tests/button.test.tsx create mode 100644 packages/create-rstack/template-pnpm/packages/ui/tests/rstest.setup.ts create mode 100644 packages/create-rstack/template-pnpm/packages/ui/tests/tsconfig.json create mode 100644 packages/create-rstack/template-pnpm/packages/ui/tsconfig.json create mode 100644 packages/create-rstack/template-pnpm/pnpm-workspace.yaml create mode 100644 packages/create-rstack/template-pnpm/rstack.config.ts create mode 100644 packages/create-rstack/template-pnpm/tsconfig.base.json diff --git a/packages/create-rstack/README.md b/packages/create-rstack/README.md index e41dc6d7..56d4f8a4 100644 --- a/packages/create-rstack/README.md +++ b/packages/create-rstack/README.md @@ -50,6 +50,7 @@ npx create-rstack --dir my-project --template app-vanilla-ts --no-git - `lib-solid-ts` - TypeScript Solid library - `doc` - Basic documentation site - `doc-i18n` - Multilingual documentation site +- `pnpm` - pnpm workspace - `turborepo` - Turborepo - `nx` - Nx diff --git a/packages/create-rstack/src/index.ts b/packages/create-rstack/src/index.ts index a925e197..26a9a661 100644 --- a/packages/create-rstack/src/index.ts +++ b/packages/create-rstack/src/index.ts @@ -43,6 +43,7 @@ const templateNames = [ 'lib-solid-ts', 'doc', 'doc-i18n', + 'pnpm', 'turborepo', 'nx', ]; @@ -57,7 +58,7 @@ const resolveTemplateName = (template: string): string => { const getTemplateName = async ({ template }: Argv): Promise => { if (typeof template === 'string') { - if (/^(?:app|lib|doc|turborepo|nx)(?:-|$)/u.test(template)) { + if (/^(?:app|lib|doc|pnpm|turborepo|nx)(?:-|$)/u.test(template)) { return resolveTemplateName(template); } @@ -81,6 +82,7 @@ const getTemplateName = async ({ template }: Argv): Promise => { await select({ message: 'Select monorepo tool', options: [ + { value: 'pnpm', label: 'pnpm workspace' }, { value: 'turborepo', label: 'Turborepo', hint: 'pnpm' }, { value: 'nx', label: 'Nx', hint: 'pnpm' }, ], @@ -239,6 +241,6 @@ await create({ builtinTools: [], getTemplateName, getPackageManager: ({ templateName }) => - ['turborepo', 'nx'].includes(templateName) ? 'pnpm' : undefined, + ['pnpm', 'turborepo', 'nx'].includes(templateName) ? 'pnpm' : undefined, onGitResolved: injectStagedSetup, }); diff --git a/packages/create-rstack/template-pnpm/README.md b/packages/create-rstack/template-pnpm/README.md new file mode 100644 index 00000000..7ee61969 --- /dev/null +++ b/packages/create-rstack/template-pnpm/README.md @@ -0,0 +1,33 @@ +# pnpm workspace + Rstack + +## Setup + +```bash +pnpm install +``` + +## Structure + +- `apps/web`: React application. +- `packages/ui`: Shared UI components. +- `tsconfig.base.json`: Shared TypeScript configuration. + +## Scripts + +Run from the repository root: + +- `pnpm run build`: Build all packages in dependency order. +- `pnpm run dev`: Build shared packages, then start the web app and watch the shared UI package. +- `pnpm run test`: Build shared packages, then run tests. +- `pnpm run check`: Run lint, formatting, and TypeScript checks. +- `pnpm run lint`: Lint the workspace. +- `pnpm run format`: Format the workspace. + +Run `pnpm run build` before `pnpm run check`. + +Use `pnpm --filter