mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-22 05:35:13 +00:00
feat(kit,nuxt): respect nuxt ignore patterns in nitro (#22808)
This commit is contained in:
parent
a70904fd8b
commit
54a6eab406
@ -1,6 +1,6 @@
|
|||||||
import { existsSync, readFileSync } from 'node:fs'
|
import { existsSync, readFileSync } from 'node:fs'
|
||||||
import ignore from 'ignore'
|
import ignore from 'ignore'
|
||||||
import { join, relative } from 'pathe'
|
import { join, relative, resolve } from 'pathe'
|
||||||
import { tryUseNuxt } from './context'
|
import { tryUseNuxt } from './context'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -16,14 +16,7 @@ export function isIgnored (pathname: string): boolean {
|
|||||||
|
|
||||||
if (!nuxt._ignore) {
|
if (!nuxt._ignore) {
|
||||||
nuxt._ignore = ignore(nuxt.options.ignoreOptions)
|
nuxt._ignore = ignore(nuxt.options.ignoreOptions)
|
||||||
const resolvedIgnore = nuxt.options.ignore.flatMap(s => resolveGroupSyntax(s))
|
nuxt._ignore.add(resolveIgnorePatterns())
|
||||||
|
|
||||||
nuxt._ignore.add(resolvedIgnore)
|
|
||||||
|
|
||||||
const nuxtignoreFile = join(nuxt.options.rootDir, '.nuxtignore')
|
|
||||||
if (existsSync(nuxtignoreFile)) {
|
|
||||||
nuxt._ignore.add(readFileSync(nuxtignoreFile, 'utf-8'))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const cwds = nuxt.options._layers?.map(layer => layer.cwd).sort((a, b) => b.length - a.length)
|
const cwds = nuxt.options._layers?.map(layer => layer.cwd).sort((a, b) => b.length - a.length)
|
||||||
@ -35,6 +28,31 @@ export function isIgnored (pathname: string): boolean {
|
|||||||
return !!(relativePath && nuxt._ignore.ignores(relativePath))
|
return !!(relativePath && nuxt._ignore.ignores(relativePath))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function resolveIgnorePatterns (relativePath?: string): string[] {
|
||||||
|
const nuxt = tryUseNuxt()
|
||||||
|
|
||||||
|
// Happens with CLI reloads
|
||||||
|
if (!nuxt) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!nuxt._ignorePatterns) {
|
||||||
|
nuxt._ignorePatterns = nuxt.options.ignore.flatMap(s => resolveGroupSyntax(s))
|
||||||
|
|
||||||
|
const nuxtignoreFile = join(nuxt.options.rootDir, '.nuxtignore')
|
||||||
|
if (existsSync(nuxtignoreFile)) {
|
||||||
|
const contents = readFileSync(nuxtignoreFile, 'utf-8')
|
||||||
|
nuxt._ignorePatterns.push(...contents.trim().split(/\r?\n/))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (relativePath) {
|
||||||
|
return nuxt._ignorePatterns.map(p => p.startsWith('*') || p.startsWith('!*') ? p : relative(relativePath, resolve(nuxt.options.rootDir, p)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nuxt._ignorePatterns
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function turns string containing groups '**\/*.{spec,test}.{js,ts}' into an array of strings.
|
* This function turns string containing groups '**\/*.{spec,test}.{js,ts}' into an array of strings.
|
||||||
* For example will '**\/*.{spec,test}.{js,ts}' be resolved to:
|
* For example will '**\/*.{spec,test}.{js,ts}' be resolved to:
|
||||||
|
@ -14,7 +14,7 @@ export * from './build'
|
|||||||
export * from './compatibility'
|
export * from './compatibility'
|
||||||
export * from './components'
|
export * from './components'
|
||||||
export * from './context'
|
export * from './context'
|
||||||
export { isIgnored } from './ignore'
|
export { isIgnored, resolveIgnorePatterns } from './ignore'
|
||||||
export * from './layout'
|
export * from './layout'
|
||||||
export * from './pages'
|
export * from './pages'
|
||||||
export * from './plugin'
|
export * from './plugin'
|
||||||
|
@ -3,7 +3,7 @@ import { cpus } from 'node:os'
|
|||||||
import { join, relative, resolve } from 'pathe'
|
import { join, relative, resolve } from 'pathe'
|
||||||
import { build, copyPublicAssets, createDevServer, createNitro, prepare, prerender, scanHandlers, writeTypes } from 'nitropack'
|
import { build, copyPublicAssets, createDevServer, createNitro, prepare, prerender, scanHandlers, writeTypes } from 'nitropack'
|
||||||
import type { Nitro, NitroConfig } from 'nitropack'
|
import type { Nitro, NitroConfig } from 'nitropack'
|
||||||
import { logger } from '@nuxt/kit'
|
import { logger, resolveIgnorePatterns } from '@nuxt/kit'
|
||||||
import escapeRE from 'escape-string-regexp'
|
import escapeRE from 'escape-string-regexp'
|
||||||
import { defu } from 'defu'
|
import { defu } from 'defu'
|
||||||
import fsExtra from 'fs-extra'
|
import fsExtra from 'fs-extra'
|
||||||
@ -207,6 +207,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
|
|||||||
|
|
||||||
// Resolve user-provided paths
|
// Resolve user-provided paths
|
||||||
nitroConfig.srcDir = resolve(nuxt.options.rootDir, nuxt.options.srcDir, nitroConfig.srcDir!)
|
nitroConfig.srcDir = resolve(nuxt.options.rootDir, nuxt.options.srcDir, nitroConfig.srcDir!)
|
||||||
|
nitroConfig.ignore = [...(nitroConfig.ignore || []), ...resolveIgnorePatterns(nitroConfig.srcDir)]
|
||||||
|
|
||||||
// Add fallback server for `ssr: false`
|
// Add fallback server for `ssr: false`
|
||||||
if (!nuxt.options.ssr) {
|
if (!nuxt.options.ssr) {
|
||||||
|
@ -59,6 +59,7 @@ export interface Nuxt {
|
|||||||
// Private fields.
|
// Private fields.
|
||||||
_version: string
|
_version: string
|
||||||
_ignore?: Ignore
|
_ignore?: Ignore
|
||||||
|
_ignorePatterns?: string[]
|
||||||
|
|
||||||
/** The resolved Nuxt configuration. */
|
/** The resolved Nuxt configuration. */
|
||||||
options: NuxtOptions
|
options: NuxtOptions
|
||||||
|
@ -894,6 +894,14 @@ describe('ignore list', () => {
|
|||||||
const html = await $fetch('/ignore/composables')
|
const html = await $fetch('/ignore/composables')
|
||||||
expect(html).toContain('was import ignored: true')
|
expect(html).toContain('was import ignored: true')
|
||||||
})
|
})
|
||||||
|
it('should ignore scanned nitro handlers in .nuxtignore', async () => {
|
||||||
|
const html = await $fetch('/ignore/scanned')
|
||||||
|
expect(html).not.toContain('this should be ignored')
|
||||||
|
})
|
||||||
|
it.skipIf(isDev())('should ignore public assets in .nuxtignore', async () => {
|
||||||
|
const html = await $fetch('/ignore/public-asset')
|
||||||
|
expect(html).not.toContain('this should be ignored')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('server tree shaking', () => {
|
describe('server tree shaking', () => {
|
||||||
|
2
test/fixtures/basic/.nuxtignore
vendored
2
test/fixtures/basic/.nuxtignore
vendored
@ -1 +1,3 @@
|
|||||||
composables/ignored.*
|
composables/ignored.*
|
||||||
|
**/ignore/public-asset
|
||||||
|
server/routes/ignore/scanned.ts
|
||||||
|
1
test/fixtures/basic/public/ignore/public-asset
vendored
Normal file
1
test/fixtures/basic/public/ignore/public-asset
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
this should be ignored
|
3
test/fixtures/basic/server/routes/ignore/scanned.ts
vendored
Normal file
3
test/fixtures/basic/server/routes/ignore/scanned.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default defineEventHandler(() => {
|
||||||
|
return 'this should be ignored'
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user