我有一个使用NextJs13构建的静态Web应用程序,它没有API路径,也没有数据获取。是否可以在没有服务器的情况下从本地文件系统运行网站?
j1dl9f461#
我可以单独加载静态页面,但是页面之间的路由不起作用。首先,我需要获取构建过程中生成的静态文件。我更新了我的package.json,以便在构建后执行next export,如下所示:
package.json
next export
"scripts": { "build": "next build && next export" }
当我运行构建(在我的例子中是yarn build)时,我在项目根文件夹中得到了一个名为out的文件夹。我有一个out/index.html文件,我可以在我的浏览器中打开。但是,我的大部分内容没有正确加载。当我重新加载这个页面时,我可以看到许多失败的调用来获取各种css和javascript文件。失败的url指向像file:///_next/...这样的位置。这些文件确实存在于我的out文件夹中,这只是索引页在错误的路径上寻找它们。我可以通过将assetPrefix: "./"添加到我的next.config.js文件中来解决这个问题。下面是该文件的完整版本:
yarn build
out
out/index.html
file:///_next/...
assetPrefix: "./"
next.config.js
/** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, assetPrefix: "./", }; module.exports = nextConfig;
我再次运行了构建,这次当我打开/index. html时,我的网站页面工作正常。但是我不能在页面之间路由。如果你需要一些特定的链接,你可以用html链接替换React路由,但是当然你现在不再有单页应用程序了。在我的例子中,我只需要与某人共享一个浏览器中的工具,所以这个过程仍然是有用的。
1条答案
按热度按时间j1dl9f461#
我可以单独加载静态页面,但是页面之间的路由不起作用。
首先,我需要获取构建过程中生成的静态文件。我更新了我的
package.json
,以便在构建后执行next export
,如下所示:当我运行构建(在我的例子中是
yarn build
)时,我在项目根文件夹中得到了一个名为out
的文件夹。我有一个
out/index.html
文件,我可以在我的浏览器中打开。但是,我的大部分内容没有正确加载。当我重新加载这个页面时,我可以看到许多失败的调用来获取各种css和javascript文件。失败的url指向像file:///_next/...
这样的位置。这些文件确实存在于我的out文件夹中,这只是索引页在错误的路径上寻找它们。我可以通过将
assetPrefix: "./"
添加到我的next.config.js
文件中来解决这个问题。下面是该文件的完整版本:我再次运行了构建,这次当我打开/index. html时,我的网站页面工作正常。但是我不能在页面之间路由。如果你需要一些特定的链接,你可以用html链接替换React路由,但是当然你现在不再有单页应用程序了。
在我的例子中,我只需要与某人共享一个浏览器中的工具,所以这个过程仍然是有用的。