如何在没有 Node.js 服务器的情况下部署 Next.js 应用程序?

Raf*_*hid 11 api laravel reactjs next.js

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

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

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

Inn*_*ons 10

实际上,接受的答案是完全错误的,当你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',
}
Run Code Online (Sandbox Code Playgroud)

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

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

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');
});
Run Code Online (Sandbox Code Playgroud)

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