diff --git a/packages/build-info/src/frameworks/nuxt.test.ts b/packages/build-info/src/frameworks/nuxt.test.ts index 629a936964..c9a4c379b2 100644 --- a/packages/build-info/src/frameworks/nuxt.test.ts +++ b/packages/build-info/src/frameworks/nuxt.test.ts @@ -15,32 +15,18 @@ beforeEach(() => { fs = new NodeFS() }) -describe('Nuxt V2', () => { +describe('Nuxt (modern config)', () => { test.each([ - ['dependency', { 'package.json': JSON.stringify({ dependencies: { nuxt: 'latest' } }) }], - ['edge dependency', { 'package.json': JSON.stringify({ dependencies: { 'nuxt-edge': 'latest' } }) }], - ])('should detect Nuxt via the %s', async (_, files) => { - const cwd = mockFileSystem(files) - const detected = await new Project(fs, cwd).detectFrameworks() - expect(detected?.[0].id).toBe('nuxt') - expect(detected?.[0].name).toBe('Nuxt') - expect(detected?.[0].build.command).toBe('nuxt generate') - expect(detected?.[0].dev?.command).toBe('nuxt') - expect(detected?.[0].dev?.port).toBe(3000) - expect(detected?.[0].env).toEqual({}) - }) -}) - -describe('Nuxt V3', () => { - test.each([ - ['dependency', { 'package.json': JSON.stringify({ dependencies: { nuxt3: 'latest' } }) }], - ['major version', { 'package.json': JSON.stringify({ dependencies: { nuxt: '^3.0.0' } }) }], - ])('should detect Nuxt via the %s', async (_, files) => { + ['nuxt3 dependency', { 'package.json': JSON.stringify({ dependencies: { nuxt3: '^3.0.0' } }) }], + ['nuxt v3', { 'package.json': JSON.stringify({ dependencies: { nuxt: '^3.0.0' } }) }], + ['nuxt v4', { 'package.json': JSON.stringify({ dependencies: { nuxt: '^4.0.0' } }) }], + ['nuxt-edge v3', { 'package.json': JSON.stringify({ dependencies: { 'nuxt-edge': '^3.0.0' } }) }], + ])('should detect Nuxt via %s', async (_, files) => { const cwd = mockFileSystem(files) const project = new Project(fs, cwd) const detected = await project.detectFrameworks() expect(detected?.[0].id).toBe('nuxt') - expect(detected?.[0].name).toBe('Nuxt 3') + expect(detected?.[0].name).toBe('Nuxt') expect(detected?.[0].build.command).toBe('nuxt build') expect(detected?.[0].build?.directory).toBe('dist') expect(detected?.[0].dev?.command).toBe('nuxt dev') @@ -51,3 +37,19 @@ describe('Nuxt V3', () => { expect(settings.clearPublishDirectory).toBeTruthy() }) }) + +describe('Nuxt (legacy config)', () => { + test.each([ + ['nuxt v2', { 'package.json': JSON.stringify({ dependencies: { nuxt: '^2.0.0' } }) }], + ['nuxt-edge v2', { 'package.json': JSON.stringify({ dependencies: { 'nuxt-edge': '^2.0.0' } }) }], + ])('should detect Nuxt via %s', async (_, files) => { + const cwd = mockFileSystem(files) + const detected = await new Project(fs, cwd).detectFrameworks() + expect(detected?.[0].id).toBe('nuxt') + expect(detected?.[0].name).toBe('Nuxt') + expect(detected?.[0].build.command).toBe('nuxt generate') + expect(detected?.[0].dev?.command).toBe('nuxt') + expect(detected?.[0].dev?.port).toBe(3000) + expect(detected?.[0].env).toEqual({}) + }) +}) diff --git a/packages/build-info/src/frameworks/nuxt.ts b/packages/build-info/src/frameworks/nuxt.ts index 146456b3a9..9da796196e 100644 --- a/packages/build-info/src/frameworks/nuxt.ts +++ b/packages/build-info/src/frameworks/nuxt.ts @@ -1,4 +1,4 @@ -import { BaseFramework, Category, DetectedFramework, Detection, Framework } from './framework.js' +import { BaseFramework, Category, DetectedFramework, Framework } from './framework.js' export class Nuxt extends BaseFramework implements Framework { readonly id = 'nuxt' @@ -7,14 +7,14 @@ export class Nuxt extends BaseFramework implements Framework { category = Category.SSG dev = { - command: 'nuxt', + command: 'nuxt dev', port: 3000, pollingStrategies: [{ name: 'TCP' }], clearPublishDirectory: true, } build = { - command: 'nuxt generate', + command: 'nuxt build', directory: 'dist', } @@ -28,18 +28,12 @@ export class Nuxt extends BaseFramework implements Framework { await super.detect() if (this.detected) { - if (this.isV3(this.detected)) { - this.name = 'Nuxt 3' - - this.build.command = `nuxt build` - this.build.directory = `dist` - this.dev.command = `nuxt dev` + // Override with legacy config only for major version < 3 + if (this.detected.package?.version?.major !== undefined && this.detected.package.version.major < 3) { + this.build.command = 'nuxt generate' + this.dev.command = 'nuxt' } return this as DetectedFramework } } - - isV3(detected: Detection) { - return detected.package?.name === 'nuxt3' || detected.package?.version?.major === 3 - } }