即使文件夹结构中没有 .html 文件,Next JS 应用程序如何在浏览器上运行?

Gou*_*wat 8 html javascript node.js reactjs next.js

抱歉,如果这是一个愚蠢的问题 ,但是在 NextJS 中构建的应用程序如何与浏览器通信,因为创建后文件夹结构中没有 .html 文件npx create-next-app

kca*_*kca 5

index.html运行后创建该文件next build

文件

您为 Next.js 编写的代码是您最终想要服务的网站的抽象。

这意味着您正在以一种简单、方便的方式编写 Javascript 代码,并且必须遵循 Next.js 指定的规则。然后,您告诉 Next.js 编译您的代码 ( next build),Next.js 根据您的 Javascript 代码创建实际的网站。

网站文件是在文件夹内创建的/.next,位置index.html/.next/server/pages/index.html. (请参阅Next.js 构建 API)。

(另请注意,可能根本没有 index.html 文件,具体取决于指定的路由和构建过程。此外,文件的位置应被视为实现细节,理论上 Next.js 可能会在任何版本升级时更改此行为。 )

服务器

Next.js 还提供了自己的节点服务器,因此如果您调用next start(之后next build),它将启动自己的服务器,该服务器只知道在哪里查找文件。

Next.js 还在后台定义了一些路由(基于您的文件夹),这就是(某种程度上)您在浏览器地址栏中/pages看不到任何路由的原因。index.html

静态文件

如果您使用next export而不是next start,那么 Next.js 将创建静态文件,您将找到一个文件夹,其中包含.html文件和您可能期望看到的所有内容,并且可以由其他静态文件服务器提供服务。(为此,您必须至少<Image>从创建的项目中删除create-next-app,因为的限制next export

备注index.html

因此,我们找到了 Next.js 创建文件的位置,但还要注意 - 虽然遵循约定是有意义的 -如果您正在编写自己的服务器,index.html实际上甚至不需要有一个文件,例如:index.html

// - save as 'server.js',
// - run 'node server.js'
// - open 'http://localhost:8888/abc' in the browser

const http = require("http");
const url = require("url");

http.createServer(function(request, response) {
    var uri = url.parse(request.url).pathname;
    response.writeHead(200);
    response.write('<html><body>you called the url:' + request.url + '</body></html>');
    response.end();
}).listen(8888);
Run Code Online (Sandbox Code Playgroud)