【问题标题】:How to deploy Next.js app without Node.js server?如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?
【发布时间】:2021-04-15 00:31:47
【问题描述】:

我希望使用 Laravel API 部署 Next.js 应用程序。我使用 CRA 开发了 React 应用程序,在这些应用程序中,我使用 API 服务器将 CRA 的 index.html 作为应用程序的入口点。

但是在 Next.js 中,开发后我知道它需要一个 Node.js 服务器来提供服务(这是我的错,没有注意到)。有一个选项 next export 构建 Next.js 应用程序的静态表示,它有一个 index.html。我通过我的 Laravel API 将 index.html 作为应用程序的入口。它提供页面,但只是一些静态内容。

我希望知道的是,是否可以在没有任何节点服务器的情况下从单个 PHP 共享主机托管 aAPI 和 Next 应用程序?如果是这样,怎么做?如果不是这样,还有什么替代方案?

【问题讨论】:

    标签: reactjs laravel api next.js


    【解决方案1】:

    实际上接受的答案是完全错误的,当您执行 yarn build 并且您的 package.json 设置为 "build": "next build && next export", 时,您将获得一个 out 文件夹,其中所有项目都已使用在没有 node.js 服务器的情况下构建

    现在由于您使用的是 laravel,并且您使用 out 文件夹,您将只加载一半页面,因为路由设置不正确。为此,您需要编辑 next.config.js 将其编辑为

    module.exports = {
     distDir: '/resources/views',
     assetPrefix: '/resources/views',
    }
    

    这些会将根目录设置为 Laravel 中的根目录。现在这仅适用于 SPA(单页应用程序),仅适用于您需要与 out 文件夹中的每个视图文件匹配的动态路由

    对于您拥有的每条路线,您需要在 laravel 中创建一个新的“获取”路线

    Route::get('/', function () {
      return require resource_path('views/index.html');
    });
    
    Route::get('/contacts', function () {
      return require resource_path('views/contacts.html');
    });
    
    Route::get('/post/{slug}', function () {
      return require resource_path('views/post/[slug].html');
    });
    

    请注意,您可以为动态路由传递通配符,它​​们都可以工作。一旦你这样做并在 Laravel 的 /resources/views 中部署路由 out 文件夹,它就会工作

    【讨论】:

      【解决方案2】:

      显然 nodejs 服务器没有替代品,目前这对我来说不是一个选项,所以很遗憾我不得不放弃 next.js 并创建一个 CRA 应用程序并尽可能多地使用 next.js。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2011-03-21
        相关资源
        最近更新 更多