diff --git a/packages/next-server/server/require.ts b/packages/next-server/server/require.ts index 061ce5adab9f2ec2658fb19ffc301556f4ed0326..7acea80bc8fc7daedd7fc2c5fa5aeb34f1721fba 100644 --- a/packages/next-server/server/require.ts +++ b/packages/next-server/server/require.ts @@ -14,6 +14,7 @@ export function pageNotFoundError(page: string): Error { } export const tryAmp = (manifest: any, page: string) => { + page = page === '/' ? '/index' : page const hasAmp = manifest[page + '.amp'] if (hasAmp) { page += '.amp' diff --git a/packages/next/export/index.js b/packages/next/export/index.js index 50fc6cc27685bbfab82bff442f94956ada903d98..392edcd1eb7e86e2b3d9bedec0b97f05f6fbde12 100644 --- a/packages/next/export/index.js +++ b/packages/next/export/index.js @@ -59,7 +59,7 @@ export default async function (dir, options, configuration) { if (isAmp) { defaultPathMap[path].query = { amp: 1 } - const nonAmp = cleanAmpPath(path).replace(/\/$/, '') + const nonAmp = cleanAmpPath(path).replace(/\/$/, '') || '/' if (!defaultPathMap[nonAmp]) { defaultPathMap[path].query.ampOnly = true } diff --git a/test/integration/export-default-map/pages/index.amp.js b/test/integration/export-default-map/pages/index.amp.js new file mode 100644 index 0000000000000000000000000000000000000000..a7c4e23fd876ebffd45ad0a68704483f6ff78e77 --- /dev/null +++ b/test/integration/export-default-map/pages/index.amp.js @@ -0,0 +1 @@ +export { default } from './index' diff --git a/test/integration/export-default-map/pages/index.js b/test/integration/export-default-map/pages/index.js new file mode 100644 index 0000000000000000000000000000000000000000..5f3215d2989e1420202b3cab5f7063693bfbaadf --- /dev/null +++ b/test/integration/export-default-map/pages/index.js @@ -0,0 +1,3 @@ +export default () => ( +

Simple hybrid amp/non-amp page

+) diff --git a/test/integration/export-default-map/test/index.test.js b/test/integration/export-default-map/test/index.test.js index bf009d167e7a1279aeb7c671a7fe4507333ff53d..9bc9143ce0d52ace1b9cb39ba1bc8405c9d850e0 100644 --- a/test/integration/export-default-map/test/index.test.js +++ b/test/integration/export-default-map/test/index.test.js @@ -56,4 +56,14 @@ describe('Export with default map', () => { const $ = cheerio.load(html) expect($('link[rel=amphtml]').attr('href')).toBe('/info.amp') }) + + it('should export hybrid index amp page correctly', async () => { + expect.assertions(3) + await expect(access(join(outdir, 'index.html'))).resolves.toBe(undefined) + await expect(access(join(outdir, 'index.amp/index.html'))).resolves.toBe(undefined) + + const html = await readFile(join(outdir, 'index.html')) + const $ = cheerio.load(html) + expect($('link[rel=amphtml]').attr('href')).toBe('/index.amp') + }) })