摘要:而更多的應(yīng)用采用的是簡單的同構(gòu)實(shí)現(xiàn)。請(qǐng)使用動(dòng)態(tài)路由進(jìn)行處理。后來用布署頻繁調(diào)試,發(fā)現(xiàn)自定義在上并不能用,看建議使用動(dòng)態(tài)路由。如果要取消這種行為可以使用方法。利用動(dòng)態(tài)實(shí)現(xiàn)代碼塊切片。如果使用的話,建議使用動(dòng)態(tài)路由去做布署啦。
使用next.js結(jié)合GITHUB ISSUE實(shí)現(xiàn)博客。 起因
。。。。起因是因?yàn)樵谀尘W(wǎng)站看到有一些類似實(shí)現(xiàn)。打算自己也做個(gè)side-project。
習(xí)慣性的對(duì)自己做的side-project 做一些描述性的語句,不做具體,而提供思路。
next 簡單的快速上手很快,基本沒有什么曲線渲染。可能只是需要了解服務(wù)端常見知識(shí)即可。
我們常說SSR也就是服務(wù)端渲染。那對(duì)應(yīng)的服務(wù)端渲染,自然有客戶端渲染。
類似SPA就是客戶端渲染。
首先從router來講起。我們知道前端router 自從有了HTML5 API以后也可以進(jìn)行router功能。
hash 模式 OR history模式。
兩種模式的不同也只是在于 hash mode 對(duì)于 服務(wù)端hashchange 也是一個(gè)path
而history mode 對(duì)于服務(wù)端 history push 可能對(duì)應(yīng)的是另一個(gè)asset path
所以一般需要對(duì)服務(wù)器做路徑的匹配以導(dǎo)向?qū)?yīng)資源。
而更多的應(yīng)用采用的是簡單的同構(gòu)實(shí)現(xiàn)。
server render做首屏或者seo 優(yōu)化,然后生命周期數(shù)據(jù)都繼續(xù)在前端處理。refresh刷新頁面的時(shí)候再重復(fù)這個(gè)過程。
步驟首先厘清實(shí)現(xiàn)流程步驟。
最簡單的步驟:
獲取數(shù)據(jù)源
構(gòu)建前端頁面
部署
其實(shí)就是簡單的三步。
數(shù)據(jù)源獲取首先是數(shù)據(jù)源的獲取。
找到github.com api地址。
依照步驟
申請(qǐng)user token
找到對(duì)應(yīng)的api
(直接用api 前端query)(得到所有數(shù)據(jù) 自身根據(jù)數(shù)據(jù)做query)
這里選擇了后者,因?yàn)榭紤]到文件內(nèi)容量一般不會(huì)特別大。
動(dòng)手能力強(qiáng)的人,一般第一步不用跟步驟。
所以第二步開始。
我們這里選用的是v4 版本的graphql api。
我挺喜歡graphql的。
查詢定義方便。
前后端可以用一套query 模版。
反正都是初次接觸next了,也不妨初次再接觸github 的v4 api。
首先 REST API是需要數(shù)據(jù)對(duì)應(yīng)接口,http方法決定操作,query決定結(jié)果。操作冪等。
這里用GraphQL 第一步,我們是需要找到endpoint 入口節(jié)點(diǎn)。
用來接受并解析驗(yàn)證執(zhí)行查詢。
我們找到repositoryConnection 利用這個(gè)連接找到所有nodes 相關(guān)聯(lián)信息即可。
學(xué)習(xí)GraphQL 需要了解nodes, connection, edge基本概念
首先我們要獲取所有total的數(shù)據(jù)源。
query { repository(owner:"ZWkang", name: "Start-Learning-React") { issues(orderBy: { direction: DESC, field: CREATED_AT }, first:1){ totalCount }} }
拿到totalCount以后用來去換取所有的issue Data源。
issues data query 可以自己試著寫一下。
拿到以后就寫入文件啦。
當(dāng)然你也可以對(duì)數(shù)據(jù)源做一遍篩選。 你喜歡都可以。
構(gòu)建前端頁面。這里next 其實(shí)我也不是用的很深。
以下列舉一些我遇到的問題:
1. 自定義server首先是server端的server start
你可以選擇自定義得去處理請(qǐng)求,然后精確得控制路由
app.prepare().then(() => {})
thenable里面你甚至可以使用現(xiàn)有類庫進(jìn)行router操作。
2. 注意部署運(yùn)行環(huán)境要注意部署環(huán)境是node端還是no server 端。
如果是no server 端,例如now publish 這些靜態(tài)文件服務(wù)器。請(qǐng)使用動(dòng)態(tài)路由進(jìn)行處理。
原理是根據(jù)router 在build的時(shí)候即進(jìn)行處理。
3. 運(yùn)行預(yù)處理css/sass等的話需要在next.config.js中自行配置環(huán)境配置方式與webpack配置大同小異。
4. 可以利用next/head自定義生成html文檔head部分內(nèi)容 5. next/link的使用。link是更強(qiáng)大的router,處理封裝了as屬性,prefetch方法等。
prefetch默認(rèn)行為是在mouseover的時(shí)候進(jìn)行prefetch操作。prefetch是在生產(chǎn)模式對(duì)資源的獲取。
next/link 組件可以進(jìn)行的具體操作參見文檔內(nèi)容
6. router的問題。之前我是用server => page, 在page內(nèi)處理query的。
后來用now布署頻繁調(diào)試,發(fā)現(xiàn)自定義server path在now server上并不能用,看issue建議使用動(dòng)態(tài)路由。
詳情請(qǐng)看這篇文檔
還有router會(huì)進(jìn)行兩次render,在最后也是在上面文檔發(fā)現(xiàn)了一個(gè)注意點(diǎn)。
Note: Pages that are statically optimized by automatic prerendering will be hydrated without their route parameters provided (query will be empty, i.e. {}). After hydration, Next.js will trigger an update to your application to provide the route parameters in the query object. If your application cannot tolerate this behavior, you can opt-out of static optimization by capturing the query parameter in getInitialProps.
next 會(huì)對(duì)頁面組件進(jìn)行一次路由的預(yù)渲染處理,所以query 會(huì)為空。如果要取消這種行為可以使用getInitialProps方法。
后來在組件加 getInitialProps 果然就disabled 這種情況了。
7. 利用動(dòng)態(tài)import 實(shí)現(xiàn)代碼塊切片。服務(wù)端渲染可以讓我們有一個(gè)好處就是 可以更顆粒化地處理 某個(gè)頁面實(shí)際需要的內(nèi)容塊,從而優(yōu)化加載速度。
利用next/dynamic
由于我們這里使用的是一次性抓取的數(shù)據(jù)塊。(其實(shí)可以區(qū)分多個(gè)數(shù)據(jù)塊,對(duì)應(yīng)頁面獲取對(duì)應(yīng)數(shù)據(jù)塊其實(shí)也可以,體積也較少。)
但是這里考慮到我的數(shù)據(jù)量還是很小的緣故,所以直接對(duì)原來的代碼做切分。
articleList 組件 與Article組件分別用來做獲取數(shù)據(jù)的異步塊。
這樣以來,首文件的大小就從100K 降低到了20K。WOW 真的是太棒了
布署布署可以使用node 端布署,自行架設(shè)服務(wù)器,用pm2等之類的進(jìn)程管理run server.js即可。
如果使用now的話,建議使用動(dòng)態(tài)路由去做布署啦。
now cli地址
完整布署后的demo地址demo 地址
github 地址
本文只是提供操作思路。具體實(shí)現(xiàn)還請(qǐng)翻看代碼。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106806.html
摘要:為什么不選擇其他方案在文章的開頭我有提到,我曾經(jīng)嘗試過用,,自行搭建服務(wù)等途徑去嘗試維護(hù)博客。但這些嘗試的結(jié)果均不合我意,最后無疾而終。我們使用作為博客平臺(tái),也就是相當(dāng)于管理后端。 showImg(https://segmentfault.com/img/remote/1460000019265125?w=700&h=420); 對(duì)于愛寫東西的人來說,挑一個(gè)合適的博客平臺(tái)是非常重要的。...
摘要:什么是先貼官網(wǎng)英文中文。所有的操作必須指明到最底層的,并且返回值為標(biāo)量,以確保響應(yīng)結(jié)果的結(jié)構(gòu)明白無誤。對(duì)于前端來說,在查詢的時(shí)候基本都要了解上面說的這幾個(gè)概念,具體應(yīng)用可參見我的這篇文章如何利用開發(fā)個(gè)人博客。 本文主要結(jié)合GitHub GraphQL API,從前端使用者的角度來談GraphQL,沒有GraphQL項(xiàng)目的同學(xué)可以拿GitHub GraphQL API練手,具體代碼可參見...
摘要:使用的搜索功能進(jìn)行搜索。搜尋好的開源項(xiàng)目有兩種途徑的搜索功能如果你對(duì)學(xué)習(xí)的內(nèi)容有明確的方法,使用這種。的每日趨勢(shì)如果你對(duì)最新的技術(shù)熱點(diǎn)感興趣的話,使用這種。豐富的使用案例。這點(diǎn)要求可能比較高了,一般個(gè)人開源者很少會(huì)去收集項(xiàng)目的使用案例。 github作為全球最大的開源軟件托管平臺(tái),自2008年上線以來,一直吸引了無數(shù)的程序開發(fā)者在上面開源分享自己的項(xiàng)目代碼。尤其是在微軟收購github...
摘要:為什么不選擇其他方案在文章的開頭我有提到,我曾經(jīng)嘗試過用,,自行搭建服務(wù)等途徑去嘗試維護(hù)博客。但這些嘗試的結(jié)果均不合我意,最后無疾而終。我們使用作為博客平臺(tái),也就是相當(dāng)于管理后端。showImg(https://user-gold-cdn.xitu.io/2019/5/22/16adf79473dbdf59); 對(duì)于愛寫東西的人來說,挑一個(gè)合適的博客平臺(tái)是非常重要的。而作為一個(gè) Web 開發(fā)...
摘要:獲取標(biāo)簽及相關(guān)通常,我們會(huì)在博客首頁設(shè)計(jì)一個(gè)有分類的文章列表,這就要求在發(fā)布時(shí)需要選擇對(duì)應(yīng)的。這里我用的是的和的庫,核心代碼如下結(jié)合開發(fā)個(gè)人博客的核心內(nèi)容基本就這么多了,具體代碼歡迎查看,一起踩坑。 作為一個(gè)程序員,搭建一個(gè)個(gè)人博客幾乎是所有人的需求,一來比較酷,二來也可以記錄自己的學(xué)習(xí)和生活總結(jié)。但如果你不是全棧工程師,實(shí)現(xiàn)這個(gè)需求還是有點(diǎn)麻煩。后端搭建一套現(xiàn)有的前端框架及前端寫AP...
閱讀 1901·2019-08-29 16:44
閱讀 2200·2019-08-29 16:30
閱讀 812·2019-08-29 15:12
閱讀 3550·2019-08-26 10:48
閱讀 2684·2019-08-23 18:33
閱讀 3817·2019-08-23 17:01
閱讀 1967·2019-08-23 15:54
閱讀 1328·2019-08-23 15:05