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 应用的用户信息