九、Next.js,发布应用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容