我有一个带有Next.JS的React网络应用程序。我想将它上传到我的IIS FTP上。我应该复制.next文件夹吗?如果是,为什么我会在这种情况下得到错误?错误屏幕截图:
1tuwyuhd1#
您可以在服务器上创建一个本地主机,并将请求重定向到该本地主机。为此,请在主文件夹中创建一个“server.js”文件。在该文件夹中创建一个以生产模式运行的进程(在端口4000上)。server.js:
const { createServer } = require('http'); const { parse } = require('url'); const next = require('next'); const dev = process.env.NODE_ENV !== 'production'; const hostname = 'localhost'; const port = process.env.PORT || 4000; // when using middleware `hostname` and `port` must be provided below const app = next({ dev, hostname, port }); const handle = app.getRequestHandler(); app.prepare().then(() => { createServer(async (req, res) => { try { // Be sure to pass `true` as the second argument to `url.parse`. // This tells it to parse the query portion of the URL. const parsedUrl = parse(req.url, true); const { pathname, query } = parsedUrl; if (pathname === '/a') { await app.render(req, res, '/a', query); } else if (pathname === '/b') { await app.render(req, res, '/b', query); } else { await handle(req, res, parsedUrl); } } catch (err) { console.error('Error occurred handling', req.url, err); res.statusCode = 500; res.end('internal server error'); } }).listen(port, (err) => { if (err) throw err; console.log(`> Ready on http://${hostname}:${port}`); }); });
之后,创建一个“service.js”文件,将所有URL重定向到本地主机(反向代理)web.config:
<configuration> <system.webServer> <rewrite> <rules> <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:4000/{R:1}" /> </rule> </rules> </rewrite> </system.webServer>
并在最后生成“service.js”文件,该文件将server.js文件作为服务运行。service.js:
var Service = require('node-windows').Service; var path = require('path'); var svc = new Service({ name: 'service name', description: 'example server', script: path.join(__dirname, 'server.js'), workingdirectory: path.join(__dirname, 'server.js'), nodeOptions: [], env: { name: 'NODE_ENV', value: 'production', }, }); //svc.uninstall(); svc.on('install', function () { svc.start(); }); svc.install();
现在使用'node service.js'命令运行service.js。现在您可以在服务器的服务中看到'service name'服务(您可以检查它是否未启动,手动启动它)
j8ag8udp2#
将以下内容添加到您的package.json脚本中:“prod”:“next export”,并在生成后运行此脚本,然后复制输出文件夹:/输出
bmp9r5qi3#
最简单的解决方案是发布项目并将输出文件(静态html文件和资源)放到一个文件夹中,然后设置一个指向该文件夹的IIS网站。如果您不需要动态呈现,这是可以的。请看一下这个article,我在其中尝试解释了如何在IIS上部署由next.js构建的静态html网站。
5f0d552i4#
要在iis上运行node js应用程序,您需要配置iisnode模块。https://github.com/tjanczuk/iisnode然后运行下面的命令来构建应用程序:
npm run build
这将在.next文件夹中创建生产应用程序。https://nextjs.org/docs/advanced-features/static-html-export
4条答案
按热度按时间1tuwyuhd1#
您可以在服务器上创建一个本地主机,并将请求重定向到该本地主机。为此,请在主文件夹中创建一个“server.js”文件。在该文件夹中创建一个以生产模式运行的进程(在端口4000上)。server.js:
之后,创建一个“service.js”文件,将所有URL重定向到本地主机(反向代理)
web.config:
并在最后生成“service.js”文件,该文件将server.js文件作为服务运行。
service.js:
现在使用'node service.js'命令运行service.js。现在您可以在服务器的服务中看到'service name'服务(您可以检查它是否未启动,手动启动它)
j8ag8udp2#
将以下内容添加到您的package.json脚本中:“prod”:“next export”,并在生成后运行此脚本,然后复制输出文件夹:/输出
bmp9r5qi3#
最简单的解决方案是发布项目并将输出文件(静态html文件和资源)放到一个文件夹中,然后设置一个指向该文件夹的IIS网站。如果您不需要动态呈现,这是可以的。
请看一下这个article,我在其中尝试解释了如何在IIS上部署由next.js构建的静态html网站。
5f0d552i4#
要在iis上运行node js应用程序,您需要配置iisnode模块。https://github.com/tjanczuk/iisnode
然后运行下面的命令来构建应用程序:
这将在.next文件夹中创建生产应用程序。
https://nextjs.org/docs/advanced-features/static-html-export