diff --git a/packages/nuxt/src/auto-imports/module.ts b/packages/nuxt/src/auto-imports/module.ts index 6e4e12c4f68..bf500bb34e6 100644 --- a/packages/nuxt/src/auto-imports/module.ts +++ b/packages/nuxt/src/auto-imports/module.ts @@ -16,6 +16,7 @@ export default defineNuxtModule>({ imports: [], dirs: [], transform: { + include: [], exclude: undefined } }, diff --git a/packages/nuxt/src/auto-imports/transform.ts b/packages/nuxt/src/auto-imports/transform.ts index fd5f82a56bd..de59c98c0e5 100644 --- a/packages/nuxt/src/auto-imports/transform.ts +++ b/packages/nuxt/src/auto-imports/transform.ts @@ -15,16 +15,16 @@ export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx const exclude = options.transform?.exclude || [/[\\/]node_modules[\\/]/] const include = options.transform?.include || [] - // Exclude node_modules by default - if (exclude.some(pattern => id.match(pattern))) { - return false - } - // Custom includes if (include.some(pattern => id.match(pattern))) { return true } + // Exclude node_modules by default + if (exclude.some(pattern => id.match(pattern))) { + return false + } + // vue files if ( pathname.endsWith('.vue') && diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 6cd04dfb5c8..dc184dccffe 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -4,6 +4,7 @@ import type { Nuxt, NuxtOptions, NuxtConfig, ModuleContainer, NuxtHooks } from ' import { loadNuxtConfig, LoadNuxtOptions, nuxtCtx, installModule, addComponent, addVitePlugin, addWebpackPlugin, tryResolveModule } from '@nuxt/kit' // Temporary until finding better placement /* eslint-disable import/no-restricted-paths */ +import escapeRE from 'escape-string-regexp' import pagesModule from '../pages/module' import metaModule from '../head/module' import componentsModule from '../components/module' @@ -66,6 +67,11 @@ async function initNuxt (nuxt: Nuxt) { addVitePlugin(UnctxTransformPlugin(nuxt).vite({ sourcemap: nuxt.options.sourcemap })) addWebpackPlugin(UnctxTransformPlugin(nuxt).webpack({ sourcemap: nuxt.options.sourcemap })) + // Transpile layers within node_modules + nuxt.options.build.transpile.push( + ...nuxt.options._layers.filter(i => i.cwd && i.cwd.includes('node_modules')).map(i => i.cwd) + ) + // Init user modules await nuxt.callHook('modules:before', { nuxt } as ModuleContainer) const modulesToInstall = [ @@ -133,7 +139,14 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { // Temporary until finding better placement for each options.appDir = options.alias['#app'] = resolve(distDir, 'app') options._majorVersion = 3 - options._modules.push(pagesModule, metaModule, componentsModule, autoImportsModule) + options._modules.push(pagesModule, metaModule, componentsModule) + options._modules.push([autoImportsModule, { + transform: { + include: options._layers + .filter(i => i.cwd) + .map(i => new RegExp(`(^|\\/)${escapeRE(i.cwd.split('node_modules/').pop())}(\\/|$)(?!node_modules\\/)`)) + } + }]) options.modulesDir.push(resolve(pkgDir, 'node_modules')) options.build.transpile.push('@nuxt/ui-templates') options.alias['vue-demi'] = resolve(options.appDir, 'compat/vue-demi') diff --git a/test/fixtures/basic/.gitignore b/test/fixtures/basic/.gitignore new file mode 100644 index 00000000000..2a0469def7c --- /dev/null +++ b/test/fixtures/basic/.gitignore @@ -0,0 +1 @@ +!extends/node_modules diff --git a/test/fixtures/basic/extends/foo/server/middleware/foo.ts b/test/fixtures/basic/extends/foo/server/middleware/foo.ts deleted file mode 100644 index c0396502839..00000000000 --- a/test/fixtures/basic/extends/foo/server/middleware/foo.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ServerResponse } from 'node:http' - -export default (_, res: ServerResponse, next) => { - res.setHeader('injected-header', 'foo') - next() -} diff --git a/test/fixtures/basic/extends/foo/app/router.options.ts b/test/fixtures/basic/extends/node_modules/foo/app/router.options.ts similarity index 100% rename from test/fixtures/basic/extends/foo/app/router.options.ts rename to test/fixtures/basic/extends/node_modules/foo/app/router.options.ts diff --git a/test/fixtures/basic/extends/foo/components/ExtendsFoo.vue b/test/fixtures/basic/extends/node_modules/foo/components/ExtendsFoo.vue similarity index 100% rename from test/fixtures/basic/extends/foo/components/ExtendsFoo.vue rename to test/fixtures/basic/extends/node_modules/foo/components/ExtendsFoo.vue diff --git a/test/fixtures/basic/extends/foo/components/ExtendsOverride.vue b/test/fixtures/basic/extends/node_modules/foo/components/ExtendsOverride.vue similarity index 100% rename from test/fixtures/basic/extends/foo/components/ExtendsOverride.vue rename to test/fixtures/basic/extends/node_modules/foo/components/ExtendsOverride.vue diff --git a/test/fixtures/basic/extends/foo/composables/foo.ts b/test/fixtures/basic/extends/node_modules/foo/composables/foo.ts similarity index 100% rename from test/fixtures/basic/extends/foo/composables/foo.ts rename to test/fixtures/basic/extends/node_modules/foo/composables/foo.ts diff --git a/test/fixtures/basic/extends/foo/layouts/default.vue b/test/fixtures/basic/extends/node_modules/foo/layouts/default.vue similarity index 100% rename from test/fixtures/basic/extends/foo/layouts/default.vue rename to test/fixtures/basic/extends/node_modules/foo/layouts/default.vue diff --git a/test/fixtures/basic/extends/foo/layouts/override.vue b/test/fixtures/basic/extends/node_modules/foo/layouts/override.vue similarity index 100% rename from test/fixtures/basic/extends/foo/layouts/override.vue rename to test/fixtures/basic/extends/node_modules/foo/layouts/override.vue diff --git a/test/fixtures/basic/extends/foo/middleware/foo.ts b/test/fixtures/basic/extends/node_modules/foo/middleware/foo.ts similarity index 100% rename from test/fixtures/basic/extends/foo/middleware/foo.ts rename to test/fixtures/basic/extends/node_modules/foo/middleware/foo.ts diff --git a/test/fixtures/basic/extends/foo/middleware/override.ts b/test/fixtures/basic/extends/node_modules/foo/middleware/override.ts similarity index 100% rename from test/fixtures/basic/extends/foo/middleware/override.ts rename to test/fixtures/basic/extends/node_modules/foo/middleware/override.ts diff --git a/test/fixtures/basic/extends/foo/nuxt.config.ts b/test/fixtures/basic/extends/node_modules/foo/nuxt.config.ts similarity index 100% rename from test/fixtures/basic/extends/foo/nuxt.config.ts rename to test/fixtures/basic/extends/node_modules/foo/nuxt.config.ts diff --git a/test/fixtures/basic/extends/foo/pages/foo.vue b/test/fixtures/basic/extends/node_modules/foo/pages/foo.vue similarity index 100% rename from test/fixtures/basic/extends/foo/pages/foo.vue rename to test/fixtures/basic/extends/node_modules/foo/pages/foo.vue diff --git a/test/fixtures/basic/extends/foo/pages/override.vue b/test/fixtures/basic/extends/node_modules/foo/pages/override.vue similarity index 100% rename from test/fixtures/basic/extends/foo/pages/override.vue rename to test/fixtures/basic/extends/node_modules/foo/pages/override.vue diff --git a/test/fixtures/basic/extends/foo/plugins/foo.ts b/test/fixtures/basic/extends/node_modules/foo/plugins/foo.ts similarity index 100% rename from test/fixtures/basic/extends/foo/plugins/foo.ts rename to test/fixtures/basic/extends/node_modules/foo/plugins/foo.ts diff --git a/test/fixtures/basic/extends/foo/server/api/foo.ts b/test/fixtures/basic/extends/node_modules/foo/server/api/foo.ts similarity index 100% rename from test/fixtures/basic/extends/foo/server/api/foo.ts rename to test/fixtures/basic/extends/node_modules/foo/server/api/foo.ts diff --git a/test/fixtures/basic/extends/node_modules/foo/server/middleware/foo.ts b/test/fixtures/basic/extends/node_modules/foo/server/middleware/foo.ts new file mode 100644 index 00000000000..0af570f235f --- /dev/null +++ b/test/fixtures/basic/extends/node_modules/foo/server/middleware/foo.ts @@ -0,0 +1,4 @@ +// TODO: add back TypeScript and auto-importing once Nitro supports it +export default (event) => { + event.res.setHeader('injected-header', 'foo') +} diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index 83e2fbf0d5d..93c21696cd7 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -6,7 +6,7 @@ export default defineNuxtConfig({ builder: process.env.TEST_WITH_WEBPACK ? 'webpack' : 'vite', extends: [ './extends/bar', - './extends/foo' + './extends/node_modules/foo' ], nitro: { output: { dir: process.env.NITRO_OUTPUT_DIR }