将Next.js应用程序部署为具有某些托管服务提供商限制的ssr应用程序

时间:2020-02-23 18:09:09

标签: next.js

我有一个共享的托管服务提供商,可以托管节点应用程序。应用程序入口文件必须称为app.js,并且必须位于文件夹/usr/home/username/domains/domain/public_nodeapp中,这有一个限制。首次从网络访问域后,该应用会自动启动(可能由node app.js之类的应用启动)。

是否可以在诸如服务器端渲染的应用程序之类的提供程序上托管next.js应用程序(而不是由next export生成的静态HTML网站)?

运行制作应用程序生产版本的next build后,生产版本没有app.js文件,应由next start启动。我不确定是否以及如何对其进行调整(也许某些文件移动或重命名)以匹配上述限制。

2 个答案:

答案 0 :(得分:1)

您可以将app.js文件放在所需的位置,然后调用从cli触发next start时要调用的函数。

这意味着该文件应要求https://github.com/zeit/next.js/blob/canary/packages/next/cli/next-start.ts并调用nextStart

// app.js
const startServer = require('next/dist/cli/next-start');

startServer();

答案 1 :(得分:1)

是的,您可以使用自定义服务器(例如。 express.js

我为Azure做同样的事情,唯一的区别是我需要一个名为server.js的文件

示例:

// app.js
const express = require('express');
const next = require('next');

const port = process.env.PORT || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.all('*', (req, res) => handle(req, res));

  server.listen(port, (err) => {
    if (err) throw err;
    /* eslint no-console: "off" */
    console.log(`> Ready on http://localhost:${port}`);
  });
});

我希望这会有所帮助。