如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?
Posted
技术标签:
【中文标题】如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?【英文标题】:How to deploy Next.js app without Node.js server? 【发布时间】: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 应用程序?如果是这样,怎么做?如果不是这样,还有什么替代方案?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
与 webpack 捆绑时如何使 node.js 在没有 node_modules 的情况下工作?
是否可以在没有 Web dyno 的情况下将 Node.js 应用程序部署到 Heroku?
如何在没有客户端的情况下使用 facebook 的护照在 node.js 中构建 REST 服务?