From fa5121b273117b18b6fe185bf49e6ef44c1bdc6e Mon Sep 17 00:00:00 2001 From: becem-gharbi Date: Thu, 18 Jan 2024 10:42:53 +0100 Subject: [PATCH 1/5] fix(components): Fix import path of named components --- packages/nuxt/src/components/loader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/loader.ts index 2c86a709cb48..8a0260a5a6d6 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/loader.ts @@ -76,7 +76,7 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { identifier += '_lazy' imports.add(`const ${identifier} = __defineAsyncComponent(${genDynamicImport(component.filePath, { interopDefault: true })}${isClientOnly ? '.then(c => createClientOnly(c))' : ''})`) } else { - imports.add(genImport(component.filePath, [{ name: component.export, as: identifier }])) + imports.add(genImport(component.filePath, [{ name: component._raw ? 'default': component.export, as: identifier }])) if (isClientOnly) { imports.add(`const ${identifier}_wrapped = createClientOnly(${identifier})`) From aa52bfc8f266df036f33abc3154d78eebe9f4695 Mon Sep 17 00:00:00 2001 From: Becem Date: Thu, 18 Jan 2024 11:03:53 +0100 Subject: [PATCH 2/5] Update packages/nuxt/src/components/loader.ts Co-authored-by: Daniel Roe --- packages/nuxt/src/components/loader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/loader.ts index 8a0260a5a6d6..dfe4afc18e43 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/loader.ts @@ -76,7 +76,7 @@ export const loaderPlugin = createUnplugin((options: LoaderOptions) => { identifier += '_lazy' imports.add(`const ${identifier} = __defineAsyncComponent(${genDynamicImport(component.filePath, { interopDefault: true })}${isClientOnly ? '.then(c => createClientOnly(c))' : ''})`) } else { - imports.add(genImport(component.filePath, [{ name: component._raw ? 'default': component.export, as: identifier }])) + imports.add(genImport(component.filePath, [{ name: component._raw ? 'default' : component.export, as: identifier }])) if (isClientOnly) { imports.add(`const ${identifier}_wrapped = createClientOnly(${identifier})`) From ac513ea76bd218427d1362bb012168f54831d1bd Mon Sep 17 00:00:00 2001 From: becem-gharbi Date: Fri, 19 Jan 2024 09:15:28 +0100 Subject: [PATCH 3/5] test: Add `import components` to basic test --- test/basic.test.ts | 32 ++++++++++++ .../basic/modules/import-components/index.ts | 49 +++++++++++++++++++ .../import-components/runtime/components.ts | 13 +++++ .../basic/pages/import-components/index.vue | 10 ++++ 4 files changed, 104 insertions(+) create mode 100644 test/fixtures/basic/modules/import-components/index.ts create mode 100644 test/fixtures/basic/modules/import-components/runtime/components.ts create mode 100644 test/fixtures/basic/pages/import-components/index.vue diff --git a/test/basic.test.ts b/test/basic.test.ts index 63d904512cf2..b2a58ebfc5ea 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -2292,3 +2292,35 @@ function normaliseIslandResult (result: NuxtIslandResponse) { } } } + +describe('import components', () => { + let html = '' + + it.sequential('fetch import-components page', async () => { + html = await $fetch('/import-components') + }) + + it('load default component with mode all', () => { + expect(html).toContain('

default-comp-all

') + }) + + it('load default component with mode client', () => { + expect(html).toContain('

default-comp-client

') + }) + + it('load default component with mode server', () => { + expect(html).toContain('

default-comp-server

') + }) + + it('load named component with mode all', () => { + expect(html).toContain('

named-comp-all

') + }) + + it('load named component with mode client', () => { + expect(html).toContain('

named-comp-client

') + }) + + it('load named component with mode server', () => { + expect(html).toContain('

named-comp-server

') + }) +}) diff --git a/test/fixtures/basic/modules/import-components/index.ts b/test/fixtures/basic/modules/import-components/index.ts new file mode 100644 index 000000000000..2e07615a86c3 --- /dev/null +++ b/test/fixtures/basic/modules/import-components/index.ts @@ -0,0 +1,49 @@ +import { addComponent, createResolver, defineNuxtModule } from 'nuxt/kit'; + +export default defineNuxtModule({ + meta: { + name: 'import-components' + }, + setup() { + const { resolve } = createResolver(import.meta.url); + + addComponent({ + name: 'DCompClient', + filePath: resolve('./runtime/components'), + mode: 'client', + }); + + addComponent({ + name: 'DCompServer', + filePath: resolve('./runtime/components'), + mode: 'server', + }); + + addComponent({ + name: 'DCompAll', + filePath: resolve('./runtime/components'), + mode: 'all', + }); + + addComponent({ + name: 'NCompClient', + export: 'NComp', + filePath: resolve('./runtime/components'), + mode: 'client', + }); + + addComponent({ + name: 'NCompServer', + export: 'NComp', + filePath: resolve('./runtime/components'), + mode: 'server', + }); + + addComponent({ + name: 'NCompAll', + export: 'NComp', + filePath: resolve('./runtime/components'), + mode: 'all', + }); + }, +}); \ No newline at end of file diff --git a/test/fixtures/basic/modules/import-components/runtime/components.ts b/test/fixtures/basic/modules/import-components/runtime/components.ts new file mode 100644 index 000000000000..db7b3924ec31 --- /dev/null +++ b/test/fixtures/basic/modules/import-components/runtime/components.ts @@ -0,0 +1,13 @@ +import { defineComponent, h } from 'vue'; + +export default defineComponent({ + name: 'DComp', + props: { message: String }, + render: (props: any) => h('h1', props.message), +}); + +export const NComp = defineComponent({ + name: 'NComp', + props: { message: String }, + render: (props: any) => h('h1', props.message), +}); diff --git a/test/fixtures/basic/pages/import-components/index.vue b/test/fixtures/basic/pages/import-components/index.vue new file mode 100644 index 000000000000..9a20c6d9ad7f --- /dev/null +++ b/test/fixtures/basic/pages/import-components/index.vue @@ -0,0 +1,10 @@ + \ No newline at end of file From c0d8b5eddb7ebb1ada71c8b63c4675ad78c96cce Mon Sep 17 00:00:00 2001 From: becem-gharbi Date: Fri, 19 Jan 2024 19:18:33 +0100 Subject: [PATCH 4/5] test: Remove html tags from expected strings --- test/basic.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/basic.test.ts b/test/basic.test.ts index b2a58ebfc5ea..0b84492b0907 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -2301,26 +2301,26 @@ describe('import components', () => { }) it('load default component with mode all', () => { - expect(html).toContain('

default-comp-all

') + expect(html).toContain('default-comp-all') }) it('load default component with mode client', () => { - expect(html).toContain('

default-comp-client

') + expect(html).toContain('default-comp-client') }) it('load default component with mode server', () => { - expect(html).toContain('

default-comp-server

') + expect(html).toContain('default-comp-server') }) it('load named component with mode all', () => { - expect(html).toContain('

named-comp-all

') + expect(html).toContain('named-comp-all') }) it('load named component with mode client', () => { - expect(html).toContain('

named-comp-client

') + expect(html).toContain('named-comp-client') }) it('load named component with mode server', () => { - expect(html).toContain('

named-comp-server

') + expect(html).toContain('named-comp-server') }) }) From f7fff635d87baeb278eb73adca9a5d1ee1ad6745 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 19 Jan 2024 22:44:04 +0000 Subject: [PATCH 5/5] style: lint --- .../basic/modules/import-components/index.ts | 82 +++++++++---------- .../import-components/runtime/components.ts | 18 ++-- .../basic/pages/import-components/index.vue | 2 +- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/test/fixtures/basic/modules/import-components/index.ts b/test/fixtures/basic/modules/import-components/index.ts index 2e07615a86c3..532afe20c43f 100644 --- a/test/fixtures/basic/modules/import-components/index.ts +++ b/test/fixtures/basic/modules/import-components/index.ts @@ -1,49 +1,49 @@ -import { addComponent, createResolver, defineNuxtModule } from 'nuxt/kit'; +import { addComponent, createResolver, defineNuxtModule } from 'nuxt/kit' export default defineNuxtModule({ - meta: { - name: 'import-components' - }, - setup() { - const { resolve } = createResolver(import.meta.url); + meta: { + name: 'import-components' + }, + setup () { + const { resolve } = createResolver(import.meta.url) - addComponent({ - name: 'DCompClient', - filePath: resolve('./runtime/components'), - mode: 'client', - }); + addComponent({ + name: 'DCompClient', + filePath: resolve('./runtime/components'), + mode: 'client', + }) - addComponent({ - name: 'DCompServer', - filePath: resolve('./runtime/components'), - mode: 'server', - }); + addComponent({ + name: 'DCompServer', + filePath: resolve('./runtime/components'), + mode: 'server', + }) - addComponent({ - name: 'DCompAll', - filePath: resolve('./runtime/components'), - mode: 'all', - }); + addComponent({ + name: 'DCompAll', + filePath: resolve('./runtime/components'), + mode: 'all', + }) - addComponent({ - name: 'NCompClient', - export: 'NComp', - filePath: resolve('./runtime/components'), - mode: 'client', - }); + addComponent({ + name: 'NCompClient', + export: 'NComp', + filePath: resolve('./runtime/components'), + mode: 'client', + }) - addComponent({ - name: 'NCompServer', - export: 'NComp', - filePath: resolve('./runtime/components'), - mode: 'server', - }); + addComponent({ + name: 'NCompServer', + export: 'NComp', + filePath: resolve('./runtime/components'), + mode: 'server', + }) - addComponent({ - name: 'NCompAll', - export: 'NComp', - filePath: resolve('./runtime/components'), - mode: 'all', - }); - }, -}); \ No newline at end of file + addComponent({ + name: 'NCompAll', + export: 'NComp', + filePath: resolve('./runtime/components'), + mode: 'all', + }) + }, +}) diff --git a/test/fixtures/basic/modules/import-components/runtime/components.ts b/test/fixtures/basic/modules/import-components/runtime/components.ts index db7b3924ec31..96f456c19f47 100644 --- a/test/fixtures/basic/modules/import-components/runtime/components.ts +++ b/test/fixtures/basic/modules/import-components/runtime/components.ts @@ -1,13 +1,13 @@ -import { defineComponent, h } from 'vue'; +import { defineComponent, h } from 'vue' export default defineComponent({ - name: 'DComp', - props: { message: String }, - render: (props: any) => h('h1', props.message), -}); + name: 'DComp', + props: { message: String }, + render: (props: any) => h('h1', props.message), +}) export const NComp = defineComponent({ - name: 'NComp', - props: { message: String }, - render: (props: any) => h('h1', props.message), -}); + name: 'NComp', + props: { message: String }, + render: (props: any) => h('h1', props.message), +}) diff --git a/test/fixtures/basic/pages/import-components/index.vue b/test/fixtures/basic/pages/import-components/index.vue index 9a20c6d9ad7f..8f1b927d3dfa 100644 --- a/test/fixtures/basic/pages/import-components/index.vue +++ b/test/fixtures/basic/pages/import-components/index.vue @@ -7,4 +7,4 @@ - \ No newline at end of file +