九憔辫、Next.js,發(fā)布應(yīng)用

Next.js是一個(gè)新的通用JavaScript框架仿荆,它為基于React和服務(wù)器的Web應(yīng)用提供了一個(gè)新的可選方案贰您。

Next.js目前已經(jīng)開源,https://zeit.co/blog/next

你遇到過這個(gè)問題嗎?

如何部署我的Next.js應(yīng)用?

我們還沒有討論過這個(gè)問題拢操,但它非常簡單明了锦亦。

您可以部署Next.js應(yīng)用到任何你可以運(yùn)行node.js的地方。因此令境,沒有任何類型的鎖定杠园,即使部署到ZEIT中也非常簡單。

讓我們學(xué)習(xí)部署Next.js應(yīng)用舔庶。

首先抛蚁,我們需要一個(gè)簡單的Next.js應(yīng)用程序。試著下載下面的示例應(yīng)用程序:

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

你可以執(zhí)行以下命令:

npm install
npm run dev

現(xiàn)在惕橙,您可以通過導(dǎo)航到http://localhost:3000來訪問該應(yīng)用程序瞧甩。

構(gòu)建和啟動(dòng)

首先,我們需要建立Next.js應(yīng)用于生產(chǎn)弥鹦。它將為生產(chǎn)生成一組優(yōu)化的代碼肚逸。

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

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

然后你需要啟動(dòng)Next.js應(yīng)用在一個(gè)端口上。這將執(zhí)行副渲染和服務(wù)頁面(用上面的命令構(gòu)建)朦促。

為此犬钢,只需在package.json添加以下的npm腳本:

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

這將在3000端口啟動(dòng)我們的應(yīng)用。

因此思灰,您可以運(yùn)行以下命令來運(yùn)行我們的應(yīng)用程序:

npm run build
npm run start
運(yùn)行兩個(gè)實(shí)例

現(xiàn)在,我們要運(yùn)行兩個(gè)應(yīng)用程序混滔,通常洒疚,我們這樣做是為了水平地?cái)U(kuò)展我們的應(yīng)用程序。
首先坯屿,對我們的start npm腳本做如下更改:

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

如果你在Windows上油湖,你的啟動(dòng)腳本應(yīng)該是 next start -p %PORT%.

現(xiàn)在讓我們先來構(gòu)建我們的應(yīng)用程序。

npm run build

然后嘗試在自己的終端中運(yùn)行以下命令:

PORT=8000 npm start
PORT=9000 npm start

在Windows上领跛,您需要以不同的方式運(yùn)行命令乏德。一種選擇是將npm模塊 cross-env
安裝到你的應(yīng)用中。
然后運(yùn)行 cross-env PORT=9000 npm start 從命令行吠昭。

是否有可能在兩個(gè)端口上訪問我們的應(yīng)用程序?

構(gòu)建一次喊括,運(yùn)行多個(gè)實(shí)例

正如您所看到的,您需要一次構(gòu)建您的應(yīng)用程序矢棚。然后你可以在任意多的端口上啟動(dòng)它郑什。

部署到 ▲ZEIT now

現(xiàn)在我們知道如何構(gòu)建和y啟動(dòng)Next.js。我們用npm腳本做了所有的事情蒲肋。因此蘑拯,您將能夠定制它,以使用您最喜歡的部署服務(wù)兜粘。

但如果你使用 ▲ZEIT now, 只有一個(gè)步驟申窘。

只需添加以下的npm腳本:

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

然后 install now. 然后應(yīng)用以下命令:

now

基本上,您運(yùn)行您的應(yīng)用程序根目錄內(nèi)"現(xiàn)在"命令孔轴。

在這里剃法,我們提到端口8000作為我們啟動(dòng)應(yīng)用程序的端口,但是我們在部署到ZEIT時(shí)并沒有改變它距糖。

那么玄窝,在部署到ZEIT的時(shí)候,我們可以在哪個(gè)端口訪問我們的應(yīng)用呢?

ZEIT總是使用443

實(shí)際上悍引,即使你在端口8000上啟動(dòng)你的應(yīng)用程序恩脂,你也可以使用端口443(默認(rèn)端口為“https”網(wǎng)站)訪問它。

這是ZEIT的一個(gè)特點(diǎn)趣斤。你只需要在你喜歡的任何端口上啟動(dòng)你的應(yīng)用程序俩块。ZEIT現(xiàn)在將把它映射到端口443。

構(gòu)建您的應(yīng)用程序在本地

▲ZEIT now 將檢測npm構(gòu)建腳本,并在它的構(gòu)建基礎(chǔ)結(jié)構(gòu)中構(gòu)建它玉凯。

但是势腮,并不是所有的主機(jī)供應(yīng)商都有類似的東西。
在這種情況下漫仆,你可以在本地創(chuàng)建你的應(yīng)用:

npm run build

然后將應(yīng)用程序部署到該應(yīng)用程序中.next目錄捎拯。

使用定制服務(wù)器部署應(yīng)用程序

我們剛剛部署的應(yīng)用程序不使用自定義服務(wù)器代碼。但是如果我們有這個(gè)盲厌,我們怎么能部署它呢?

因此署照,請檢出以下分支:

git checkout .
git checkout clean-urls-ssr

在這一點(diǎn)上,我們使用自定義服務(wù)器來運(yùn)行我們的應(yīng)用程序吗浩,所以在你的應(yīng)用中加入Express:

npm install --save express
構(gòu)建應(yīng)用程序

即便如此建芙,你也可以用Next.js來構(gòu)建你的應(yīng)用。因此懂扼,添加以下的npm腳本:

"scripts": {
  "build": "next build"
}
啟動(dòng)應(yīng)用程序

我們需要?jiǎng)?chuàng)建自定義服務(wù)器代碼來說明這是一個(gè)生產(chǎn)應(yīng)用程序禁荸,為此,請從我們的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'

因此阀湿,我們可以像這樣啟動(dòng)我們的應(yīng)用程序:

NODE_ENV=production node server.js

因此赶熟,我們的“npm start”腳本將如下:

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

這就是你要做的。

最后

現(xiàn)在炕倘,您幾乎知道了如何部署Next.js應(yīng)用钧大。

您還可以了解更多關(guān)于部署的內(nèi)容 deploying Next.js 從我們的文檔。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罩旋,一起剝皮案震驚了整個(gè)濱河市啊央,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涨醋,老刑警劉巖瓜饥,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浴骂,居然都是意外死亡乓土,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門溯警,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趣苏,“玉大人,你說我怎么就攤上這事梯轻∈晨模” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵喳挑,是天一觀的道長彬伦。 經(jīng)常有香客問我滔悉,道長,這世上最難降的妖魔是什么单绑? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任回官,我火速辦了婚禮,結(jié)果婚禮上搂橙,老公的妹妹穿的比我還像新娘歉提。我一直安慰自己,他們只是感情好区转,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布唯袄。 她就那樣靜靜地躺著,像睡著了一般蜗帜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上资厉,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天厅缺,我揣著相機(jī)與錄音,去河邊找鬼宴偿。 笑死湘捎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窄刘。 我是一名探鬼主播窥妇,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娩践!你這毒婦竟也來了活翩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翻伺,失蹤者是張志新(化名)和其女友劉穎材泄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吨岭,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拉宗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辣辫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旦事。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖急灭,靈堂內(nèi)的尸體忽然破棺而出姐浮,到底是詐尸還是另有隱情,我是刑警寧澤化戳,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布单料,位于F島的核電站埋凯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扫尖。R本人自食惡果不足惜白对,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望换怖。 院中可真熱鬧甩恼,春花似錦、人聲如沸沉颂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铸屉。三九已至钉蒲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彻坛,已是汗流浹背顷啼。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昌屉,地道東北人钙蒙。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像间驮,于是被迫代替她去往敵國和親躬厌。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容