From be726e42b61e0f1c556dc1c1544373fd582730d3 Mon Sep 17 00:00:00 2001 From: Ahad Birang Date: Thu, 4 Jun 2020 00:05:28 +0430 Subject: [PATCH] feat(generator): allow excluding exported pages using `export:page` hook (#7455) --- packages/generator/src/generator.js | 7 +++++-- test/dev/basic.generate.test.js | 15 +++++++++++++++ test/fixtures/basic/nuxt.config.js | 2 ++ test/fixtures/basic/pages/skip-on-fail/fail.vue | 11 +++++++++++ .../fixtures/basic/pages/skip-on-fail/success.vue | 8 ++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/basic/pages/skip-on-fail/fail.vue create mode 100644 test/fixtures/basic/pages/skip-on-fail/success.vue diff --git a/packages/generator/src/generator.js b/packages/generator/src/generator.js index 81b6d367f7..07664a7ec6 100644 --- a/packages/generator/src/generator.js +++ b/packages/generator/src/generator.js @@ -359,10 +359,13 @@ export default class Generator { } // Call hook to let user update the path & html - const page = { route, path: fileName, html } + const page = { route, path: fileName, html, exclude: false } await this.nuxt.callHook('generate:page', page) - await this.nuxt.callHook('export:page', { page }) + await this.nuxt.callHook('export:page', { page, errors: pageErrors }) + if (page.exclude) { + return false + } page.path = path.join(this.distPath, page.path) // Make sure the sub folders are created diff --git a/test/dev/basic.generate.test.js b/test/dev/basic.generate.test.js index bef539fa82..405c2dd76e 100644 --- a/test/dev/basic.generate.test.js +++ b/test/dev/basic.generate.test.js @@ -36,6 +36,11 @@ describe('basic generate', () => { nuxt.hook('generate:done', () => { writeFileSync(changedFileName, '') }) + nuxt.hook('export:page', ({ page, errors }) => { + if (errors.length && page.route.includes('/skip-on-fail')) { + page.exclude = true + } + }) builder = new Builder(nuxt) builder.build = jest.fn() @@ -249,6 +254,16 @@ describe('basic generate', () => { expect(existsSync(resolve(distDir, '404.html'))).toBe(false) }) + test('Checke skipped files', () => { + expect( + existsSync(resolve(distDir, 'skip-on-fail/fail.html')) + ).toBe(false) + + expect( + existsSync(resolve(distDir, 'skip-on-fail/success.html')) + ).toBe(true) + }) + // Close server and ask nuxt to stop listening to file changes afterAll(async () => { await server.close() diff --git a/test/fixtures/basic/nuxt.config.js b/test/fixtures/basic/nuxt.config.js index bb9e1da49a..d32355e150 100644 --- a/test/fixtures/basic/nuxt.config.js +++ b/test/fixtures/basic/nuxt.config.js @@ -32,6 +32,8 @@ export default { '/users/1', '/users/2', '/тест雨', + '/skip-on-fail/success', + '/skip-on-fail/fail', { route: '/users/3', payload: { id: 3000 } } ], interval: 200 diff --git a/test/fixtures/basic/pages/skip-on-fail/fail.vue b/test/fixtures/basic/pages/skip-on-fail/fail.vue new file mode 100644 index 0000000000..cdc0dd66d6 --- /dev/null +++ b/test/fixtures/basic/pages/skip-on-fail/fail.vue @@ -0,0 +1,11 @@ + + + diff --git a/test/fixtures/basic/pages/skip-on-fail/success.vue b/test/fixtures/basic/pages/skip-on-fail/success.vue new file mode 100644 index 0000000000..14cab05e97 --- /dev/null +++ b/test/fixtures/basic/pages/skip-on-fail/success.vue @@ -0,0 +1,8 @@ + + +