摘要:原文地址靜態(tài)博客之前也有搭建過(guò),不過(guò)使用一鍵生成的,其實(shí)當(dāng)時(shí)也有考慮過(guò),不過(guò)這個(gè)框架搭建博客入門(mén)還是比較難的,前置知識(shí)點(diǎn)包括和。使用建立項(xiàng)目已經(jīng)自帶了不少插件,但在我的搭建過(guò)程中仍然有一些需要自己添加的。
原文地址:https://ssshooter.com/2018-12...
靜態(tài)博客之前也有搭建過(guò),不過(guò)使用 Hexo 一鍵生成的,其實(shí)當(dāng)時(shí)也有考慮過(guò) Gatsby,不過(guò)這個(gè)框架搭建博客入門(mén)還是比較難的,前置知識(shí)點(diǎn)包括 react 和 graphQL。
這個(gè)系列的文章記錄的就是這個(gè)博客搭建中需要注意的點(diǎn)。
此博客使用 gatsby-starter-blog 作為框架,后續(xù)自己添加功能。
在安裝 gatsby cli 后運(yùn)行此指令即可以 gatsby-starter-blog 為模板創(chuàng)建博客。
gatsby new gatsby-blog https://github.com/gatsbyjs/gatsby-starter-blog
項(xiàng)目創(chuàng)建后文件夾結(jié)構(gòu)基本如下(有區(qū)別是因?yàn)檫@是我搭建好的截圖,也有可能是 starter 的版本升級(jí))
其中最為重要的是 gatsby-node.js、/src/templates/blog-post.js 以及 gatsby-config.js。
gatsby-node.js頁(yè)面創(chuàng)建邏輯大部分都在 gatsby-node.js,打開(kāi)文件可以看到類(lèi)似代碼:
// 頁(yè)面創(chuàng)建函數(shù) exports.createPages = ({ graphql, actions }) => { const { createPage } = actions return new Promise((resolve, reject) => { const blogPostTemplate = path.resolve(`src/templates/blog-post.js`) // 查詢(xún) md 文件構(gòu)建頁(yè)面 // 此處查詢(xún)使用的是 graphql,這也是 Gatsby 入門(mén)門(mén)檻較高的原因之一 // 不過(guò)其實(shí)這是一個(gè)比 sql 更容易理解的查詢(xún)語(yǔ)言 resolve( graphql( ` { allMarkdownRemark(limit: 1000) { edges { node { frontmatter { path } } } } } ` ).then(result => { if (result.errors) { reject(result.errors) } // 遍歷查詢(xún)結(jié)果生成頁(yè)面 result.data.allMarkdownRemark.edges.forEach(({ node }) => { const path = node.frontmatter.path // 生成單個(gè)頁(yè)面的函數(shù) createPage({ path, // 頁(yè)面路徑 component: blogPostTemplate, // 頁(yè)面使用的模板 // 這是注入上下文變量,注入后可以在模板頁(yè)面中使用變量 // 變量可以使用于 graphql 查詢(xún)和 jsx 編寫(xiě) context: { path, }, }) }) }) ) }) }/src/templates/blog-post.js
此處只是一個(gè)舉例,其他模板文件和頁(yè)面文件的結(jié)構(gòu)都類(lèi)似,所以這里使用 /src/templates/blog-post.js 說(shuō)明文件結(jié)構(gòu)。(另外放在 /src/pages/ 的 js 文件都是會(huì)轉(zhuǎn)換為頁(yè)面的)
這類(lèi)文件兩部分:
第一部分:export default BlogPostTemplate這是頁(yè)面視圖的組件,跟普通 jsx 一樣,不過(guò)上面有說(shuō)到:createPage 函數(shù)是可以注入?yún)?shù)到模板文件的。
而這些參數(shù)就在 this.props.pageContext 中。
另外,下面將會(huì)提到的頁(yè)面查詢(xún)函數(shù)所得的數(shù)據(jù)在 this.props.data。
第二部分:export const pageQuery// 注意其中 $slug,這也是被頁(yè)面創(chuàng)建函數(shù)注入的上下文變量,沒(méi)有前綴,直接使用即可 export const pageQuery = graphql` query BlogPostBySlug($slug: String!) { site { siteMetadata { title author } } markdownRemark(fields: { slug: { eq: $slug } }) { id excerpt html frontmatter { title tags date(formatString: "MMMM DD, YYYY") } } } `
查詢(xún)函數(shù)大概長(zhǎng)這樣,簡(jiǎn)單來(lái)說(shuō) graphql 就是把你需要的數(shù)據(jù)填入你的請(qǐng)求,然后返回給你,光說(shuō)不易理解,自己玩一把就能立刻明白!
更方便的是,在項(xiàng)目開(kāi)發(fā)環(huán)境運(yùn)行后,還會(huì)自帶一個(gè) graphql 查詢(xún)頁(yè)面:http://localhost:8000/___graphql
一定要注意右上角是自帶文檔的!遇到數(shù)據(jù)結(jié)構(gòu)懵逼的時(shí)候,在文檔查一下就 ok 啦(你甚至可以 ctrl 點(diǎn)擊 query 中的字段名直接跳轉(zhuǎn)到對(duì)應(yīng)文檔,實(shí)在方便得不能再方便了,好評(píng)?。?/p>
頁(yè)面中的查詢(xún)函數(shù)返回的結(jié)果會(huì)注入到 this.props.data,跟普通屬性一樣照常使用即可。
gatsby-config.jsgatsby-config.js 看名字就知道這是 Gatsby 的配置文件。使用 starter 建立項(xiàng)目已經(jīng)自帶了不少插件,但在我的搭建過(guò)程中仍然有一些需要自己添加的。
這里是 Gatsby 的插件庫(kù),遇到什么需求可以?xún)?yōu)先在此處搜索。
總結(jié)結(jié)合這三個(gè)重要文件,便是 Gatsby 的應(yīng)用結(jié)構(gòu):
讀取設(shè)置和插件 -> 調(diào)用創(chuàng)建頁(yè)面前查詢(xún)所需資源 -> 創(chuàng)建頁(yè)面,把查詢(xún)到的參數(shù)注入到模板 -> 進(jìn)行模板本身的查詢(xún) -> 填入數(shù)據(jù) -> 成功生成一個(gè)頁(yè)面
整個(gè)流程大部分都是使用循環(huán)生成所有頁(yè)面。
此系列下一篇將會(huì)是分頁(yè)相關(guān)的詳細(xì)說(shuō)明,這是我初始化之后第一個(gè)加上的功能(是的, starter 是不帶分頁(yè)的...)。
參考鏈接:
https://www.gatsbyjs.org/docs...
https://www.gatsbyjs.org/docs...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99881.html
摘要:所以自己定值博客,或許可以讓自己堅(jiān)持更新下去。配合上語(yǔ)雀的文章發(fā)布推送絕配,于是有了這么個(gè)功能專(zhuān)題。 可以前往我的博客閱讀:https://ssshooter.com/2019-02... 0 前言 本文并不是從 0 開(kāi)始使用 gatsby.js 搭建博客,starter 使用的是 gatsby-starter-blog。使用 gatsby-starter-blog 可以大量節(jié)省項(xiàng)目搭...
摘要:原文地址使用搭建靜態(tài)博客關(guān)鍵文件本文將會(huì)介紹如何為初始項(xiàng)目添加分頁(yè)功能。不過(guò)由于本來(lái)就打算重寫(xiě)樣式,這一塊可以放心刪掉處理完這個(gè)問(wèn)題你的新博客就實(shí)現(xiàn)分頁(yè)功能了下一步是樣式的相關(guān)調(diào)整,留到下一篇繼續(xù)講 原文地址:https://ssshooter.com/2018-12... 使用 Gatsby.js 搭建靜態(tài)博客 1 關(guān)鍵文件 0 && ( ← 上一頁(yè) ...
摘要:原文鏈接偶然看到通過(guò)語(yǔ)雀發(fā)布文章到靜態(tài)博客,很方便,實(shí)現(xiàn)過(guò)程也很有意思。我的配置接收推送此時(shí)在語(yǔ)雀發(fā)布文章,接口就會(huì)收到推送的文章信息。 原文鏈接:https://ssshooter.com/2019-01... 偶然看到通過(guò)語(yǔ)雀 webhook 發(fā)布文章到 Hexo 靜態(tài)博客,很方便,實(shí)現(xiàn)過(guò)程也很有意思。同樣的原理可以運(yùn)用到 Gatsby.js 博客上。 因?yàn)槭褂昧?netlify,...
摘要:成功添加樣式當(dāng)然,除了,還有其他樣式如等,還有其他可以看官網(wǎng)右側(cè)的選項(xiàng)。不過(guò)比較麻煩的是覆蓋樣式需重啟服務(wù)才能生效不能嵌套選擇器這是一個(gè) 原文鏈接:https://ssshooter.com/2018-12... 回顧:使用 Gatsby.js 搭建靜態(tài)博客 2 實(shí)現(xiàn)分頁(yè) 修復(fù)代碼高亮 為了測(cè)試樣式,隨便找一個(gè)以前的 .md 文件粘貼到 blog 項(xiàng)目中渲染看看效果: showImg(...
摘要:原文鏈接回顧使用搭建靜態(tài)博客樣式調(diào)整官方自帶標(biāo)簽系統(tǒng)教程,英語(yǔ)過(guò)關(guān)可以直接閱讀官方教程。制作頁(yè)面展示所有標(biāo)簽重點(diǎn)同樣是查詢(xún)部分是標(biāo)簽名,是包含該標(biāo)簽的文章總數(shù)。在之前寫(xiě)好的文章頁(yè)渲染標(biāo)簽就是查詢(xún)的時(shí)候多一個(gè)標(biāo)簽字段,然后渲染上,完事。 原文鏈接:https://ssshooter.com/2018-12... 回顧:使用 Gatsby.js 搭建靜態(tài)博客 3 樣式調(diào)整 官方自帶標(biāo)簽系統(tǒng)...
閱讀 911·2023-04-26 02:16
閱讀 1218·2019-08-30 15:55
閱讀 2797·2019-08-30 15:53
閱讀 3392·2019-08-29 15:38
閱讀 2900·2019-08-29 13:42
閱讀 1989·2019-08-26 13:34
閱讀 1849·2019-08-26 10:10
閱讀 3083·2019-08-23 14:40