diff --git a/.changeset/start-generate-routes-vite-build.md b/.changeset/start-generate-routes-vite-build.md new file mode 100644 index 00000000..36f7f19b --- /dev/null +++ b/.changeset/start-generate-routes-vite-build.md @@ -0,0 +1,5 @@ +--- +"@tanstack/create": patch +--- + +Generate the route tree of new Start apps on Vite with `vite build` instead of `tsr generate`, which leaves out the Start `Register` block. diff --git a/packages/cli/tests-e2e/blank-smoke.spec.ts b/packages/cli/tests-e2e/blank-smoke.spec.ts index e3f5635a..01fad0d8 100644 --- a/packages/cli/tests-e2e/blank-smoke.spec.ts +++ b/packages/cli/tests-e2e/blank-smoke.spec.ts @@ -32,7 +32,6 @@ const expectedDependencies = [ const expectedDevDependencies = [ '@cloudflare/vite-plugin', - '@tanstack/router-cli', '@types/node', '@types/react', '@types/react-dom', @@ -208,7 +207,7 @@ test('@blocking creates a production-valid blank React app', async ({ ) expect(packageJSON.scripts).toEqual({ dev: 'vite dev --port 3000', - 'generate-routes': 'tsr generate', + 'generate-routes': 'vite build', build: 'vite build', preview: 'vite preview', deploy: 'npm run build && wrangler deploy', diff --git a/packages/create/src/edge-package-json.ts b/packages/create/src/edge-package-json.ts index 5d4585c8..6929cc2d 100644 --- a/packages/create/src/edge-package-json.ts +++ b/packages/create/src/edge-package-json.ts @@ -140,6 +140,11 @@ export function createPackageJSON(options: Options) { options.mode === 'file-router' ? options.framework.optionalPackages.bundlerFileRouter?.[bundler] : undefined, + options.mode === 'file-router' && options.routerOnly + ? options.framework.optionalPackages.bundlerRouterOnlyFileRouter?.[ + bundler + ] + : undefined, ] for (const addition of additions.filter( (addition): addition is Record => Boolean(addition), diff --git a/packages/create/src/frameworks/react/project/packages.json b/packages/create/src/frameworks/react/project/packages.json index 1675fbb1..6680ccf8 100644 --- a/packages/create/src/frameworks/react/project/packages.json +++ b/packages/create/src/frameworks/react/project/packages.json @@ -27,7 +27,7 @@ "vite": { "scripts": { "dev": "vite dev --port 3000", - "generate-routes": "tsr generate", + "generate-routes": "vite build", "build": "vite build", "preview": "vite preview" }, @@ -75,8 +75,11 @@ } } }, - "bundlerFileRouter": { + "bundlerRouterOnlyFileRouter": { "vite": { + "scripts": { + "generate-routes": "tsr generate" + }, "devDependencies": { "@tanstack/router-cli": "^1.132.0" } diff --git a/packages/create/src/frameworks/solid/project/packages.json b/packages/create/src/frameworks/solid/project/packages.json index 85bf6018..f1fe3a0e 100644 --- a/packages/create/src/frameworks/solid/project/packages.json +++ b/packages/create/src/frameworks/solid/project/packages.json @@ -18,7 +18,7 @@ "vite": { "scripts": { "dev": "vite dev --port 3000", - "generate-routes": "tsr generate", + "generate-routes": "vite build", "build": "vite build", "start": "node .output/server/index.mjs", "preview": "vite preview" @@ -68,8 +68,11 @@ } } }, - "bundlerFileRouter": { + "bundlerRouterOnlyFileRouter": { "vite": { + "scripts": { + "generate-routes": "tsr generate" + }, "devDependencies": { "@tanstack/router-cli": "^1.133.21" } diff --git a/packages/create/src/package-json.ts b/packages/create/src/package-json.ts index 8a0e0d25..fde5f7fd 100644 --- a/packages/create/src/package-json.ts +++ b/packages/create/src/package-json.ts @@ -100,6 +100,11 @@ export function createPackageJSON(options: Options) { options.mode === 'file-router' ? options.framework.optionalPackages.bundlerFileRouter?.[bundler] : undefined, + options.mode === 'file-router' && options.routerOnly + ? options.framework.optionalPackages.bundlerRouterOnlyFileRouter?.[ + bundler + ] + : undefined, ] for (const addition of additions.filter(Boolean)) { packageJSON = mergePackageJSON(packageJSON, addition) diff --git a/packages/create/tests/blank-preset.test.ts b/packages/create/tests/blank-preset.test.ts index 22909adf..c6ca05f9 100644 --- a/packages/create/tests/blank-preset.test.ts +++ b/packages/create/tests/blank-preset.test.ts @@ -36,7 +36,6 @@ const BLANK_DEPENDENCY_ALLOWLIST = [ ] const BLANK_DEV_DEPENDENCY_ALLOWLIST = [ - '@tanstack/router-cli', '@types/node', '@types/react', '@types/react-dom', @@ -169,7 +168,6 @@ describe('blank project preset', () => { 'solid-js', ]) expect(Object.keys(packageJSON.devDependencies).sort()).toEqual([ - '@tanstack/router-cli', 'typescript', 'vite', 'vite-plugin-solid', diff --git a/packages/create/tests/bundlers.test.ts b/packages/create/tests/bundlers.test.ts index fbcf2aee..94191661 100644 --- a/packages/create/tests/bundlers.test.ts +++ b/packages/create/tests/bundlers.test.ts @@ -206,7 +206,11 @@ describe('bundler project generation', () => { expect(packageJSON.scripts.build).toBe(`${bundler} build`) expect(packageJSON.scripts.preview).toBe(`${bundler} preview`) expect(packageJSON.scripts['generate-routes']).toBe( - bundler === 'vite' ? 'tsr generate' : 'rsbuild build', + bundler === 'rsbuild' + ? 'rsbuild build' + : routerOnly + ? 'tsr generate' + : 'vite build', ) if (bundler === 'vite') { @@ -251,8 +255,16 @@ describe('bundler project generation', () => { expect(packageJSON.scripts).not.toHaveProperty('start') expect(packageJSON.dependencies).not.toHaveProperty('srvx') expect(files[configFile]).toContain('@tanstack/router-plugin') + if (bundler === 'vite') { + expect(packageJSON.devDependencies).toHaveProperty( + '@tanstack/router-cli', + ) + } } else { expect(packageJSON.dependencies).toHaveProperty(startPackage) + expect(packageJSON.devDependencies).not.toHaveProperty( + '@tanstack/router-cli', + ) if (bundler === 'rsbuild') { expect(packageJSON.scripts.start).toContain('srvx') expect(packageJSON.dependencies).toHaveProperty('srvx') diff --git a/packages/create/tests/framework-template.test.ts b/packages/create/tests/framework-template.test.ts index 97432925..505df2c8 100644 --- a/packages/create/tests/framework-template.test.ts +++ b/packages/create/tests/framework-template.test.ts @@ -21,18 +21,9 @@ describe('framework templates', () => { it.each([ ['React', createReactFrameworkDefinition], ['Solid', createSolidFrameworkDefinition], - ])('%s includes route generation tooling', (_, createDefinition) => { + ])('%s defaults to Vite and offers Rsbuild', (_, createDefinition) => { const framework = createDefinition() - expect( - framework.optionalPackages.bundlers.vite.scripts['generate-routes'], - ).toBe('tsr generate') - expect( - framework.optionalPackages.bundlers.rsbuild.scripts['generate-routes'], - ).toBe('rsbuild build') - expect( - framework.optionalPackages.bundlerFileRouter.vite.devDependencies, - ).toHaveProperty('@tanstack/router-cli') expect(framework.defaultBundler).toBe('vite') expect(framework.bundlers?.map((bundler) => bundler.id)).toEqual([ 'vite', diff --git a/packages/create/tests/package-json.test.ts b/packages/create/tests/package-json.test.ts index e2d96a06..941cdbed 100644 --- a/packages/create/tests/package-json.test.ts +++ b/packages/create/tests/package-json.test.ts @@ -65,6 +65,44 @@ describe('createPackageJSON', () => { }, ) + it.each([false, true])( + 'applies a custom framework bundlerFileRouter to file-router apps (routerOnly=%s)', + (routerOnly) => { + const framework = { + id: 'custom', + basePackageJSON: {}, + optionalPackages: { + bundlerFileRouter: { + vite: { + scripts: { routes: 'custom-routes' }, + devDependencies: { 'custom-routes': '^1.0.0' }, + }, + }, + }, + } as unknown as Framework + const options = { + chosenAddOns: [], + addOnOptions: {}, + mode: 'file-router', + routerOnly, + typescript: true, + tailwind: false, + projectName: 'test', + packageManager: 'pnpm', + framework, + } as unknown as Options + + const packageJSON = createPackageJSON(options) + + expect(packageJSON.scripts).toHaveProperty('routes', 'custom-routes') + expect(packageJSON.devDependencies).toHaveProperty( + 'custom-routes', + '^1.0.0', + ) + expect(createEdgePackageJSON(options)).toEqual(packageJSON) + }, + ) + it('should create a package.json', () => { const packageJSON = createPackageJSON({ chosenAddOns: [