nextjs 应用程序的入口点在哪里?

Posted

技术标签:

【中文标题】nextjs 应用程序的入口点在哪里?【英文标题】:Where is entry point of nextjs application? 【发布时间】:2020-05-12 00:34:54 【问题描述】:

在将 nextjs 应用程序部署到 c-panel 托管时,它会询问应用程序的入口点,默认为 app.js。在正常的反应应用程序中,它完全处于控制之中,但是当使用nextjs 时,不清楚哪个 js 文件可以启动应用程序。

关于选择正确的 js 文件作为应用程序入口点的任何想法?

编辑:

我的托管服务提供商为我提供了以下代码来设置一个快速应用程序(它使用 next 的请求处理程序)来处理请求:

const express = require('express');
const next = require('next');

const dev = process.env.NODE_ENV !== 'production';
const nextApp = next( dev );
const handle = nextApp.getRequestHandler();

const port = 3454;

nextApp.prepare().then(() => 
  const app = express();

  app.get('*', (req, res) => 
    return handle(req, res);
  );

  app.listen(port, err => 
    if (err) throw err;
    console.log(`> Ready on localhost:$port`);
  );
);

它可以工作,但速度很慢,因为它根据服务器请求编译源文件。

【问题讨论】:

Next.js有很多入口点,实际上每个Next.js页面都是一个入口点。这个c-panel 的用途是什么 说我想从索引页开始我应该怎么做? 你说的“开始”是什么意思,它会触发什么?这个文件在基于反应的应用中有什么用途? 更新答案。检查一下。 所以这个入口点在它上面运行节点,这意味着你需要npm run build(它将运行next build,准备生产构建)然后给你的自定义快速服务器入口点@987654332 @ 【参考方案1】:

我很惊讶地看到 cpanel 具有启动 nodejs 应用程序的功能。

您需要了解的有关 app.js 的内容:

App.js 包含一个网络服务器应用程序(根据上面的代码,您的托管服务提供商建议您使用 ExpressJS - 最常用的 JS 网络服务器应用程序)将网络文件提供给浏览器(类似于 Apache)。

"它可以工作,但速度很慢,因为它按需编译源文件以 服务器请求。”

你有 package.json 文件吗?

你知道 cpanel 运行了什么命令来启动你的应用程序吗?

请检查您的 NextJS App 是在开发模式还是生产模式下运行。

【讨论】:

感谢您的回复。我脑子里有几个问题。1:下一个 js 如何在Development 中托管我的应用程序? 2:在Production 中应该怎么做?3:如何配置nextjs 应用程序以在特定端口上运行?并回答您的问题 1-是 2-pm2 开始 3- 最好的测试方法是什么? 1.通常开发人员在他们的本地计算机上运行开发模式。 2. Prod 模式意味着 NextJS 将制作 prod 构建文件(关于效率代码、最小化文件大小、捆绑等),因此您的应用程序将在 prod 环境中运行得更快。 3. 你已经有了答案,你的 app.js 文件 ln.8 解释了你想使用哪个端口。 NextJS 应用程序具有构建开发或生产模式的特定命令,next 用于开发,next build 用于生产。查看他们的文档以获取更多信息。 我认为你完全误解了我的意思;D。第一个问题是我的意思是下一个 js 必须运行一个节点应用程序(就像我在问题中发布的那样)来监听 http 请求,对吗?托管代码在哪里? 您可以将其托管在您的服务器中。它只是how did you run your application。它是一个模式/设置/配置,不管你怎么称呼它。【参考方案2】:

你只需要导出你的 nextjs 应用程序,它就可以工作了

pages -- 是否有pages

index.js example.js

app.js -- 是否有app.js文件

只需添加以下脚本

 "scripts": 
    "build": "next build",
    "export": "next export",
    "serve": "serve out"
  ,

您可以先构建项目,然后将其导出。然后你可以服务它来检查它会如何部署。

在 cPanel 的情况下,只需将可能名为 out 的 nextjs 构建文件夹提取到您的文件夹中,例如 xyz.com。

在构建中会有一个 index.html 作为您的主文件。

【讨论】:

这种方法的缺点是服务器端数据获取不起作用,并且没有服务器端数据获取引用带有 url 的页面不起作用。【参考方案3】:

对我来说最好的解决方案是使用一些进程管理器来引导应用程序。所以我使用PM2 来启动应用程序并使其保持运行。我在c-panel 终端中发出了以下命令,现在一切正常:

NODE_ENV=production pm2 start server.js

给定server.js 具有以下代码:

const express = require('express');
const next = require('next');

const dev = process.env.NODE_ENV !== 'production';
const nextApp = next( dev );
const handle = nextApp.getRequestHandler();

const port = 3454;

nextApp.prepare().then(() => 
  const app = express();

  app.get('*', (req, res) => 
    return handle(req, res);
  );

  app.listen(port, err => 
    if (err) throw err;
    console.log(`> Ready on localhost:$port`);
  );
);

【讨论】:

嗨,我在共享主机上部署下一个 js 时遇到了同样的问题。如果我没记错的话,这是 A2 托管平台。我正在使用相同的。你能指导我如何设置服务器并让应用程序运行吗?

以上是关于nextjs 应用程序的入口点在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

可执行程序的入口点在那里?(强化概念:程序真正的入口是mainCRTstartup)

NextJs - 我们可以在哪里添加 <script> 代码?

在 Kubernetes 上 Keycloak 登录后获取 NextJS 应用的用户信息

使用 nextjs 应用程序中的 axios 将文件上传到 graphql api 服务器时我错在哪里?

安装了 Spyder。点在哪里?

剑指Offer:环形链表的入口