我建立了一个下一个。js app.页面在开发环境中工作正常,但如果我尝试运行生产构建,则只运行索引。js页面正确加载,所有其他页面都以404结束。
npm run build输出如下:
reating an optimized production build ...
Compiled successfully.
Warning: You have opted-out of Automatic Prerendering due to `getInitialProps` in `pages/_app`.
Read more: https://err.sh/next.js/opt-out-automatic-prerendering
Page Size Files Packages
┌ σ / 66.8 kB 4 27
├ /_app 17.9 kB 0 31
├ /_document
├ /_error 397 B 0 27
├ σ /Products/[specificPage]/Dashboard 404 B 4 27
├ σ /Products/Overview 95.1 kB 9 30
├ σ /Products/Roadmap 475 B 4 27
├ σ /Strategy/Goals 451 B 4 27
└ σ /Strategy/Metrics 459 B 4 27
因此,我假设页面得到正确的构建。现在这让我相当困惑。
从我的索引。我有一个next/link to /strategy/goals,如果点击它,它将永远加载。如前所述,如果直接访问,页面显示404。
编辑:另外,控制台只显示http://localhost:3000上的Ready--〉不显示任何关于构建页面的日志,不确定这应该发生在生产中还是只发生在开发中。
3条答案
按热度按时间von4xj4u1#
***TLDR:***/页应仅包含小写字母。
问题是文件夹名称和文件(例如/Product/Overview)大写,这在测试中没有问题,因为接下来直接路由,case没有问题。
执行构建版本时,生产环境的文件系统接管路由。有些操作系统(macOS对我来说)区分大小写,因为找不到页面,所以无法正确路由。
通过将/pages目录中的所有内容小写来修复。
gpfsuwkq2#
在我的情况下,这是因为
index
页面和第二个页面有不同的文件名,但导出常量的名称是错误的(由于复制粘贴)即,两份文件都有:
const Home: NextPage = () => {
解决办法是更改其中一个的名称
myzjeezk3#
请确保您没有任何子文件夹内的网页文件夹。此外,所有文件夹和文件必须小写。
**(不工作)**前:
之后(工作):