fix(builder): only listen for file changes for supported extensions (#5812)

This commit is contained in:
Pim 2019-05-27 11:06:53 +02:00 committed by Pooya Parsa
parent 7354d95ee3
commit 1f2bf1c3d3
6 changed files with 39 additions and 46 deletions

View File

@ -209,6 +209,10 @@ export default class Builder {
} }
} }
globPathWithExtensions(path) {
return `${path}/**/*.{${this.supportedExtensions.join(',')}}`
}
async generateRoutesAndFiles() { async generateRoutesAndFiles() {
consola.debug('Generating nuxt files') consola.debug('Generating nuxt files')
@ -229,7 +233,7 @@ export default class Builder {
await this.resolveLoadingIndicator(templateContext) await this.resolveLoadingIndicator(templateContext)
// Add vue-app template dir to watchers // Add vue-app template dir to watchers
this.options.build.watch.push(this.template.dir) this.options.build.watch.push(this.globPathWithExtensions(this.template.dir))
await this.compileTemplates(templateContext) await this.compileTemplates(templateContext)
@ -274,7 +278,7 @@ export default class Builder {
} }
async resolveFiles(dir, cwd = this.options.srcDir) { async resolveFiles(dir, cwd = this.options.srcDir) {
return this.ignore.filter(await glob(`${dir}/**/*.{${this.supportedExtensions.join(',')}}`, { return this.ignore.filter(await glob(this.globPathWithExtensions(dir), {
cwd, cwd,
ignore: this.options.ignore ignore: this.options.ignore
})) }))
@ -568,6 +572,7 @@ export default class Builder {
watcher.on(event, listener) watcher.on(event, listener)
} }
// TODO: due to fixes in chokidar this isnt used anymore and could be removed in Nuxt v3
const { rewatchOnRawEvents } = this.options.watchers const { rewatchOnRawEvents } = this.options.watchers
if (rewatchOnRawEvents && Array.isArray(rewatchOnRawEvents)) { if (rewatchOnRawEvents && Array.isArray(rewatchOnRawEvents)) {
watcher.on('raw', (_event) => { watcher.on('raw', (_event) => {
@ -592,26 +597,20 @@ export default class Builder {
} }
watchClient() { watchClient() {
const src = this.options.srcDir
const rGlob = dir => ['*', '**/*'].map(glob => r(src, `${dir}/${glob}.{${this.supportedExtensions.join(',')}}`))
let patterns = [ let patterns = [
r(src, this.options.dir.layouts), r(this.options.srcDir, this.options.dir.layouts),
r(src, this.options.dir.middleware), r(this.options.srcDir, this.options.dir.middleware)
...rGlob(this.options.dir.layouts)
] ]
if (this.options.store) { if (this.options.store) {
patterns.push(r(src, this.options.dir.store)) patterns.push(r(this.options.srcDir, this.options.dir.store))
} }
if (this._nuxtPages && !this._defaultPage) { if (this._nuxtPages && !this._defaultPage) {
patterns.push( patterns.push(r(this.options.srcDir, this.options.dir.pages))
r(src, this.options.dir.pages),
...rGlob(this.options.dir.pages)
)
} }
patterns = patterns.map(upath.normalizeSafe) patterns = patterns.map((path, ...args) => upath.normalizeSafe(this.globPathWithExtensions(path), ...args))
const refreshFiles = debounce(() => this.generateRoutesAndFiles(), 200) const refreshFiles = debounce(() => this.generateRoutesAndFiles(), 200)

View File

@ -76,7 +76,7 @@ describe('builder: builder generate', () => {
]) ])
expect(builder.resolveCustomTemplates).toBeCalledTimes(1) expect(builder.resolveCustomTemplates).toBeCalledTimes(1)
expect(builder.resolveLoadingIndicator).toBeCalledTimes(1) expect(builder.resolveLoadingIndicator).toBeCalledTimes(1)
expect(builder.options.build.watch).toEqual(['/var/nuxt/src/template']) expect(builder.options.build.watch).toEqual(['/var/nuxt/src/template/**/*.{vue,js,ts,tsx}'])
expect(builder.compileTemplates).toBeCalledTimes(1) expect(builder.compileTemplates).toBeCalledTimes(1)
expect(consola.success).toBeCalledTimes(1) expect(consola.success).toBeCalledTimes(1)
expect(consola.success).toBeCalledWith('Nuxt files generated') expect(consola.success).toBeCalledWith('Nuxt files generated')

View File

@ -42,25 +42,24 @@ describe('builder: builder watch', () => {
const patterns = [ const patterns = [
'/var/nuxt/src/layouts', '/var/nuxt/src/layouts',
'/var/nuxt/src/middleware', '/var/nuxt/src/middleware'
'/var/nuxt/src/layouts/*.{vue,js,ts,tsx}',
'/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}'
] ]
expect(r).toBeCalledTimes(4) const globbedPatterns = [
expect(r).nthCalledWith(1, '/var/nuxt/src', '/var/nuxt/src/layouts') '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}',
expect(r).nthCalledWith(2, '/var/nuxt/src', '/var/nuxt/src/middleware') '/var/nuxt/src/middleware/**/*.{vue,js,ts,tsx}'
expect(r).nthCalledWith(3, '/var/nuxt/src', '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}') ]
expect(r).nthCalledWith(4, '/var/nuxt/src', '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}')
expect(upath.normalizeSafe).toBeCalledTimes(4) expect(r).toBeCalledTimes(2)
expect(upath.normalizeSafe).nthCalledWith(1, '/var/nuxt/src/layouts', 0, patterns) expect(r).nthCalledWith(1, '/var/nuxt/src', patterns[0])
expect(upath.normalizeSafe).nthCalledWith(2, '/var/nuxt/src/middleware', 1, patterns) expect(r).nthCalledWith(2, '/var/nuxt/src', patterns[1])
expect(upath.normalizeSafe).nthCalledWith(3, '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}', 2, patterns)
expect(upath.normalizeSafe).nthCalledWith(4, '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}', 3, patterns) expect(upath.normalizeSafe).toBeCalledTimes(2)
expect(upath.normalizeSafe).nthCalledWith(1, globbedPatterns[0], 0, patterns)
expect(upath.normalizeSafe).nthCalledWith(2, globbedPatterns[1], 1, patterns)
expect(builder.createFileWatcher).toBeCalledTimes(1) expect(builder.createFileWatcher).toBeCalledTimes(1)
expect(builder.createFileWatcher).toBeCalledWith(patterns, ['add', 'unlink'], expect.any(Function), expect.any(Function)) expect(builder.createFileWatcher).toBeCalledWith(globbedPatterns, ['add', 'unlink'], expect.any(Function), expect.any(Function))
expect(builder.assignWatcher).toBeCalledTimes(1) expect(builder.assignWatcher).toBeCalledTimes(1)
}) })
@ -83,8 +82,8 @@ describe('builder: builder watch', () => {
builder.watchClient() builder.watchClient()
expect(r).toBeCalledTimes(5) expect(r).toBeCalledTimes(3)
expect(r).nthCalledWith(5, '/var/nuxt/src', '/var/nuxt/src/store') expect(r).nthCalledWith(3, '/var/nuxt/src', '/var/nuxt/src/store')
}) })
test('should NOT watch pages files on client if _defaultPage=true', () => { test('should NOT watch pages files on client if _defaultPage=true', () => {
@ -108,7 +107,7 @@ describe('builder: builder watch', () => {
builder.watchClient() builder.watchClient()
expect(r).toBeCalledTimes(4) expect(r).toBeCalledTimes(2)
}) })
test('should watch pages files', () => { test('should watch pages files', () => {
const nuxt = createNuxt() const nuxt = createNuxt()
@ -130,10 +129,11 @@ describe('builder: builder watch', () => {
builder.watchClient() builder.watchClient()
expect(r).toBeCalledTimes(7) expect(r).toBeCalledTimes(3)
expect(r).nthCalledWith(5, '/var/nuxt/src', '/var/nuxt/src/pages') expect(r).nthCalledWith(3, '/var/nuxt/src', '/var/nuxt/src/pages')
expect(r).nthCalledWith(6, '/var/nuxt/src', '/var/nuxt/src/pages/*.{vue,js,ts,tsx}')
expect(r).nthCalledWith(7, '/var/nuxt/src', '/var/nuxt/src/pages/**/*.{vue,js,ts,tsx}') expect(upath.normalizeSafe).toBeCalledTimes(3)
expect(upath.normalizeSafe).nthCalledWith(3, '/var/nuxt/src/pages/**/*.{vue,js,ts,tsx}', 2, expect.any(Array))
}) })
test('should invoke generateRoutesAndFiles on file refresh', () => { test('should invoke generateRoutesAndFiles on file refresh', () => {

View File

@ -66,7 +66,7 @@ export default () => ({
// Watch // Watch
watch: [], watch: [],
watchers: { watchers: {
rewatchOnRawEvents: env.linux ? ['rename'] : undefined, rewatchOnRawEvents: undefined,
webpack: {}, webpack: {},
chokidar: { chokidar: {
ignoreInitial: true ignoreInitial: true

View File

@ -363,9 +363,7 @@ Object {
"chokidar": Object { "chokidar": Object {
"ignoreInitial": true, "ignoreInitial": true,
}, },
"rewatchOnRawEvents": Array [ "rewatchOnRawEvents": undefined,
"rename",
],
"webpack": Object {}, "webpack": Object {},
}, },
} }

View File

@ -327,9 +327,7 @@ Object {
"chokidar": Object { "chokidar": Object {
"ignoreInitial": true, "ignoreInitial": true,
}, },
"rewatchOnRawEvents": Array [ "rewatchOnRawEvents": undefined,
"rename",
],
"webpack": Object {}, "webpack": Object {},
}, },
} }
@ -662,9 +660,7 @@ Object {
"chokidar": Object { "chokidar": Object {
"ignoreInitial": true, "ignoreInitial": true,
}, },
"rewatchOnRawEvents": Array [ "rewatchOnRawEvents": undefined,
"rename",
],
"webpack": Object {}, "webpack": Object {},
}, },
} }