未验证 提交 4dc07795 编写于 作者: T Tim Neutkens 提交者: GitHub

Error when exporting to `static` directory (#20969)

Fixes #20408
Fixes #20925
上级 7bb5f1a2
# Cannot output to /static
#### Why This Error Occurred
Either you set `distDir` to `static` in your `next.config.js` or during `next export` you tried to export to the `static` directory.
This is not allowed due to `static` being a special folder in Next.js used to serve static assets.
#### Possible Ways to Fix It
Use a different `distDir` or export to a different folder.
### Useful Links
- [Static file serving docs](https://nextjs.org/docs/basic-features/static-file-serving)
......@@ -252,6 +252,12 @@ export default async function exportApp(
)
}
if (outDir === join(dir, 'static')) {
throw new Error(
`The 'static' directory is reserved in Next.js and can not be used as the export out directory. https://err.sh/vercel/next.js/can-not-output-to-static`
)
}
await recursiveDelete(join(outDir))
await promises.mkdir(join(outDir, '_next', buildId), { recursive: true })
......
......@@ -13,7 +13,7 @@ describe('Errors on output to public', () => {
await fs.writeFile(nextConfig, `module.exports = { distDir: 'public' }`)
const results = await nextBuild(appDir, [], { stdout: true, stderr: true })
expect(results.stdout + results.stderr).toMatch(
/The 'public' directory is reserved in Next.js and can not be set as/
/The 'public' directory is reserved in Next\.js and can not be set as/
)
await fs.remove(nextConfig)
})
......@@ -31,7 +31,7 @@ describe('Errors on output to public', () => {
}
)
expect(results.stdout + results.stderr).toMatch(
/The 'public' directory is reserved in Next.js and can not be used as/
/The 'public' directory is reserved in Next\.js and can not be used as/
)
})
})
/* eslint-env jest */
import path from 'path'
import fs from 'fs-extra'
import { nextBuild, nextExport } from 'next-test-utils'
jest.setTimeout(1000 * 60 * 1)
const appDir = path.join(__dirname, '..')
const nextConfig = path.join(appDir, 'next.config.js')
describe('Errors on output to static', () => {
it('Throws error when export out dir is static', async () => {
await fs.remove(nextConfig)
await nextBuild(appDir)
const outdir = path.join(appDir, 'static')
const results = await nextExport(
appDir,
{ outdir },
{
stdout: true,
stderr: true,
}
)
expect(results.stdout + results.stderr).toMatch(
/The 'static' directory is reserved in Next\.js and can not be used as/
)
})
})
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册