美文网首页Next.js我爱编程
九、Next.js,发布应用

九、Next.js,发布应用

作者: 小纠结在简书 | 来源:发表于2017-09-05 10:57 被阅读311次

Next.js是一个新的通用JavaScript框架,它为基于React和服务器的Web应用提供了一个新的可选方案。

Next.js目前已经开源,https://zeit.co/blog/next

你遇到过这个问题吗?

如何部署我的Next.js应用?

我们还没有讨论过这个问题,但它非常简单明了。

您可以部署Next.js应用到任何你可以运行node.js的地方。因此,没有任何类型的锁定,即使部署到ZEIT中也非常简单。

让我们学习部署Next.js应用。

首先,我们需要一个简单的Next.js应用程序。试着下载下面的示例应用程序:

git clone https://github.com/arunoda/learnnextjs-demo.git
cd learnnextjs-demo
git checkout using-shared-components

你可以执行以下命令:

npm install
npm run dev

现在,您可以通过导航到http://localhost:3000来访问该应用程序。

构建和启动

首先,我们需要建立Next.js应用于生产。它将为生产生成一组优化的代码。

为此,只需在package.json添加以下的npm脚本:

"scripts": {
  "build": "next build"
}

然后你需要启动Next.js应用在一个端口上。这将执行副渲染和服务页面(用上面的命令构建)。

为此,只需在package.json添加以下的npm脚本:

"scripts": {
  "start": "next start"
}

这将在3000端口启动我们的应用。

因此,您可以运行以下命令来运行我们的应用程序:

npm run build
npm run start
运行两个实例

现在,我们要运行两个应用程序,通常,我们这样做是为了水平地扩展我们的应用程序。
首先,对我们的start npm脚本做如下更改:

"scripts": {
  "start": "next start -p $PORT"
}

如果你在Windows上,你的启动脚本应该是 next start -p %PORT%.

现在让我们先来构建我们的应用程序。

npm run build

然后尝试在自己的终端中运行以下命令:

PORT=8000 npm start
PORT=9000 npm start

在Windows上,您需要以不同的方式运行命令。一种选择是将npm模块 cross-env
安装到你的应用中。
然后运行 cross-env PORT=9000 npm start 从命令行。

是否有可能在两个端口上访问我们的应用程序?

构建一次,运行多个实例

正如您所看到的,您需要一次构建您的应用程序。然后你可以在任意多的端口上启动它。

部署到 ▲ZEIT now

现在我们知道如何构建和y启动Next.js。我们用npm脚本做了所有的事情。因此,您将能够定制它,以使用您最喜欢的部署服务。

但如果你使用 ▲ZEIT now, 只有一个步骤。

只需添加以下的npm脚本:

"scripts": {
  "build": "next build",
  "start": "next start -p 8000"
}

然后 install now. 然后应用以下命令:

now

基本上,您运行您的应用程序根目录内"现在"命令。

在这里,我们提到端口8000作为我们启动应用程序的端口,但是我们在部署到ZEIT时并没有改变它。

那么,在部署到ZEIT的时候,我们可以在哪个端口访问我们的应用呢?

ZEIT总是使用443

实际上,即使你在端口8000上启动你的应用程序,你也可以使用端口443(默认端口为“https”网站)访问它。

这是ZEIT的一个特点。你只需要在你喜欢的任何端口上启动你的应用程序。ZEIT现在将把它映射到端口443。

构建您的应用程序在本地

▲ZEIT now 将检测npm构建脚本,并在它的构建基础结构中构建它。

但是,并不是所有的主机供应商都有类似的东西。
在这种情况下,你可以在本地创建你的应用:

npm run build

然后将应用程序部署到该应用程序中.next目录。

使用定制服务器部署应用程序

我们刚刚部署的应用程序不使用自定义服务器代码。但是如果我们有这个,我们怎么能部署它呢?

因此,请检出以下分支:

git checkout .
git checkout clean-urls-ssr

在这一点上,我们使用自定义服务器来运行我们的应用程序,所以在你的应用中加入Express:

npm install --save express
构建应用程序

即便如此,你也可以用Next.js来构建你的应用。因此,添加以下的npm脚本:

"scripts": {
  "build": "next build"
}
启动应用程序

我们需要创建自定义服务器代码来说明这是一个生产应用程序,为此,请从我们的server.js中查看这段代码

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

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare()
.then(() => {
  const server = express()

  server.get('/p/:id', (req, res) => {
    const actualPage = '/post'
    const queryParams = { title: req.params.id }
    app.render(req, res, actualPage, queryParams)
  })

  server.get('*', (req, res) => {
    return handle(req, res)
  })

  server.listen(3000, (err) => {
    if (err) throw err
    console.log('> Ready on http://localhost:3000')
  })
})
.catch((ex) => {
  console.error(ex.stack)
  process.exit(1)
})

看看下面的一行:

const dev = process.env.NODE_ENV !== 'production'

因此,我们可以像这样启动我们的应用程序:

NODE_ENV=production node server.js

因此,我们的“npm start”脚本将如下:

"scripts": {
   "start": "NODE_ENV=production node server.js"
}

这就是你要做的。

最后

现在,您几乎知道了如何部署Next.js应用。

您还可以了解更多关于部署的内容 deploying Next.js 从我们的文档。

本文翻译自:https://learnnextjs.com/basics/deploying-a-nextjs-app

相关文章

  • 九、Next.js,发布应用

    Next.js是一个新的通用JavaScript框架,它为基于React和服务器的Web应用提供了一个新的可选方案...

  • Nextjs中文文档

    Next.js 是一个轻量级的 React 服务端渲染应用框架。 Next.js中文站点 http://nextj...

  • next.js学习

    next.js是什么 Next.js 是一个轻量级的 React 服务端渲染应用框架。 用 create-next...

  • React next.js基础教程之制作马云模拟器

    Next.js简介Next.js 是一个轻量级的 React 服务端渲染应用框架。完善的React项目架构,搭建轻...

  • Next.js

    一、Next.js是什么 Next.js是一个用于生产环境的React 应用框架一个ReactJS的全栈框架 二、...

  • Next.js新手教程

    Next.js 是一个轻量级的 React 服务端渲染应用框架。本教程演示使用Next.js制作一个显示比特币汇率...

  • Next.js 2.0发布

    Next.js 2.0今天正式发布。可能有部分人没太听过这个开源框架。 Next.js是一个服务器端React框架...

  • 最简单的服务端渲染框架-Next.js

    最简单的服务端渲染框架-Next.js 快速入门 Next.js是一个用于React应用的极简的服务端渲染框架。框...

  • 不改一行代码!快速部署 Next.js 博客到腾讯云 Serve

    近期,腾讯云 Serverless 团队发布了 Serverless SSR 产品,支持将 Next.js,Nux...

  • Next.js,应用实例

    Next.js是一个新的通用JavaScript框架,它为基于React和服务器的Web应用提供了一个新的可选方案...

网友评论

  • knowIt:如何部署到Tomcat中呢?
    小纠结在简书:@knowIt 因为这个是基于前后端同构的,需要做页面静态化,如果像react那样子就没办法静态化的,这个是基于项目的需求来做技术造型的
    knowIt:@小纠结在简书 build好的文件没有index.html文件的,放进WebApps目录下不知道怎么运行,react项目build完后有index.html,是可以直接放进webapps目录下启动Tomcat运行的
    小纠结在简书:如果是用文章所说的方式,就不用部署到tomcat里面了,next.js自动的node.js服务器即可启动build好的文件;如果部署tomcat容器,放到webapp目录即可!

本文标题:九、Next.js,发布应用

本文链接:https://www.haomeiwen.com/subject/kjomrxtx.html