首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Next.js:_next/webpack-hmr请求404

Next.js:_next/webpack-hmr请求404
EN

Stack Overflow用户
提问于 2018-09-06 10:05:37
回答 2查看 3.8K关注 0票数 0

本期的演示存储库是https://github.com/hh54188/happy-server/tree/issue-demo

我尝试将Next.js与Hapi.js集成为一个插件。下面是我的next.js插件项目文件夹的主要结构:

代码语言:javascript
复制
--plugins
   |--app
        |--pages
            |--app
                |--a.js
        |--handlers
        |--public
             |--dist
        |--index.js
        |--next.config.js

下面是index.js的主要内容,其中大部分是路由注册

代码语言:javascript
复制
const nextRenderService = next({
  dir: path.join(__dirname)
});

module.exports = {
  name: "AppService",
  version: "0.0.1",
  register: async function(server, options) {
    await nextRenderService.prepare();

    server.route({
      method: "GET",
      path: `/app/${assetPrefix}/_next/webpack-hmr`,
      handler: nextHandlerWrapper(nextRenderService)
    });

    server.route({
      method: "GET",
      path: "/app/{param*}",
      handler: defaultHandler(nextRenderService)
    });

    server.route({
      method: "GET",
      path: `/app/${assetPrefix}/_next/on-demand-entries-ping`,
      handler: nextHandlerWrapper(nextRenderService)
    });

    server.route({
      method: "GET",
      path: `/app/${assetPrefix}/_next/-/page/{param*}`,
      handler: {
        directory: {
          path: path.join(__dirname, pagesPath),
          listing: true
        }
      }
    });

    server.route({
      method: "GET",
      path: `/app/${assetPrefix}/_next/{param*}`,
      handler: {
        directory: {
          path: path.join(__dirname, distPath),
          listing: true
        }
      }
    });
  }
};

但是,当我运行服务器并访问http://127.0.0.1:4000/app/a时,页面可以呈现成功,并且大多数脚本文件都可以成功加载。但是_next/webpack-hmr_next/on-demand-entries-ping请求状态是404。我注意到404状态来自Next.js,而不是Hapi.js

那么我的代码出了什么问题呢?我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2018-09-08 23:21:54

assetPrefix配置仅用于使用CDN,并且对于NextJs (documentation)是全局的。您不希望为其他内容设置此设置,例如修改NextJs路由器路径。如果您不打算使用CDN,请忽略此设置。

代码语言:javascript
复制
// in constants/index.js
const assetPrefix = process.env.NODE_ENV === "production" 
    ? "https://cdn.mydomain.com" 
    : "";

您也不希望列出所有NextJs内部路由,并使用NextJs请求处理程序来处理所有调用:

代码语言:javascript
复制
// index.js
const next = require("next");
const path = require("path");

const nextRenderService = next({
  dir: path.join(__dirname),
  dev: process.env.NODE_ENV !== "production"
});

const { defaultHandler, nextHandlerWrapper } = require("./hanlders");

module.exports = {
  name: "AppService",
  version: "0.0.1",
  register: async function(server, options) {
    // https://github.com/zeit/next.js/blob/master/examples/custom-server-hapi/server.js
    await nextRenderService.prepare();

    // handle NextJs application requests
    const handler = nextRenderService.getRequestHandler();
    server.route({
      method: "GET",
      path: "/app/{p*}",
      handler: async ({ raw, url }, h) => {
        await handler(raw.req, raw.res, url);
        return h.close;
      }
    });

    // handle NextJs private routes
    server.route({
      method: "GET",
      path: "/_next/{p*}" /* next specific routes */,
      handler: nextHandlerWrapper(nextRenderService)
    });

    // Other routes
    server.route({
      method: "GET",
      path: "/{p*}" /* catch all route */,
      handler: defaultHandler(nextRenderService)
    });
  }
};
票数 0
EN

Stack Overflow用户

发布于 2021-11-02 08:06:47

这个问题是在升级nextjs 11 > 12之后出现的。

这对我很有帮助:

代码语言:javascript
复制
npm install webpack-dev-server -g

来源:https://stackoverflow.com/a/31627310/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52195494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档