新聞中心
典型的動(dòng)態(tài)網(wǎng)站(例如基于 wordpress 的網(wǎng)站)如何工作?當(dāng)訪問(wèn)者在瀏覽器上輸入U(xiǎn)RL或通過(guò)鏈接訪問(wèn)您的網(wǎng)站時(shí),會(huì)向您的Web服務(wù)器發(fā)送請(qǐng)求。

雄縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
服務(wù)器通過(guò)必要的數(shù)據(jù)庫(kù)查詢收集所需的數(shù)據(jù),并生成一個(gè)HTML文件供您的瀏覽器顯示。另一方面,靜態(tài)站點(diǎn)將這些響應(yīng)存儲(chǔ)到服務(wù)器上的平面文件中,這些文件會(huì)立即傳遞給訪問(wèn)者。
靜態(tài)站點(diǎn)生成器已經(jīng)存在了很長(zhǎng)時(shí)間,但它們最近變得越來(lái)越流行。在本分步指南中,我們將了解如何將WordPress與靜態(tài)網(wǎng)站生成器Gatsby集成。
什么是Gatsby?
WordPress創(chuàng)建動(dòng)態(tài)網(wǎng)站,需要在服務(wù)器上安裝一堆PHP、MySQL和Apache或Nginx才能運(yùn)行。可以通過(guò)為您網(wǎng)站上的所有內(nèi)容生成HTML頁(yè)面列表來(lái)創(chuàng)建WordPress的靜態(tài)版本。
這個(gè)靜態(tài)版本的WordPress稱為無(wú)頭WordPress或無(wú)服務(wù)器WordPress。此轉(zhuǎn)換過(guò)程只需執(zhí)行一次,以便可以多次向訪問(wèn)者提供同一頁(yè)面。您如何將您的WordPress網(wǎng)站轉(zhuǎn)換為靜態(tài)版本?這就是Gatsby出現(xiàn)的地方。
Gatsby或GatsbyJS是一個(gè)使用ReactJS構(gòu)建并由GraphQL提供支持的靜態(tài)站點(diǎn)生成器。Gatsby允許任何人創(chuàng)建功能豐富、引人入勝的網(wǎng)站和應(yīng)用程序。Gatsby通過(guò)GraphQL從各種來(lái)源(包括現(xiàn)有網(wǎng)站、API調(diào)用和平面文件)為您的站點(diǎn)獲取數(shù)據(jù),并根據(jù)您指定的配置設(shè)置構(gòu)建靜態(tài)站點(diǎn)。
Gatsby是一年前才開發(fā)出來(lái)的,但大量用戶都在嘗試Gatsby。Gatsby在各種環(huán)境中都得到了認(rèn)可。Airbnb的數(shù)據(jù)科學(xué)與工程博客的主頁(yè)由Gatsby提供支持,但實(shí)際的博客文章托管在Medium上。
Airbnb的工程與數(shù)據(jù)科學(xué)博客
BRAUN(博朗)是消費(fèi)品公司寶潔的品牌。它的加拿大站點(diǎn)由Gatsby托管,而站點(diǎn)上的搜索功能由React提供支持。
博朗品牌的加拿大網(wǎng)站
此外,Gatsby還激發(fā)了自由職業(yè)者開發(fā)人員對(duì)其作品集的興趣。諸如Jacob Castro的作品集主要包含靜態(tài)內(nèi)容,其中包含作品鏈接和電子郵件聯(lián)系方式,因此靜態(tài)網(wǎng)站非常適合他的需求。
Jacob D. Castro的作品展示站
為什么選擇Gatsby?
快速網(wǎng)站: 使用Gatsby構(gòu)建靜態(tài)網(wǎng)站的主要好處是速度,自從Google宣布在網(wǎng)絡(luò)搜索排名中使用網(wǎng)站速度以來(lái),網(wǎng)站管理員一直在努力優(yōu)化速度。加載時(shí)間也會(huì)影響頁(yè)面瀏覽量和轉(zhuǎn)化率。據(jù)估計(jì),網(wǎng)站加載時(shí)間延遲一秒會(huì)導(dǎo)致轉(zhuǎn)化次數(shù)減少7%。
安全性: 您還可以通過(guò)靜態(tài)站點(diǎn)獲得額外的安全性。由于提供的是一堆靜態(tài)文件,因此沒(méi)有什么可破解的。此外,如果靜態(tài)文件丟失,您始終可以重新生成它們。
服務(wù)器成本:托管動(dòng)態(tài)站點(diǎn)需要您的服務(wù)器與您的技術(shù)堆棧兼容。如果您使用的是靜態(tài)站點(diǎn),則幾乎可以在任何服務(wù)器上托管它,這也降低了與托管相關(guān)的成本。
在每次更改時(shí)使用Gatsby生成靜態(tài)站點(diǎn)確實(shí)需要JavaScript,這也可以在將靜態(tài)文件傳輸?shù)秸军c(diǎn)之前在本地計(jì)算機(jī)上完成。
為什么要避開Gatsby?
沒(méi)有內(nèi)置動(dòng)態(tài)內(nèi)容: 如果你想使用Gatsby,你需要重新考慮如何控制和提供動(dòng)態(tài)內(nèi)容,即你需要?jiǎng)?chuàng)建靜態(tài)/動(dòng)態(tài)的混合來(lái)實(shí)現(xiàn)這一點(diǎn)(更多關(guān)于這個(gè)以下)。
例如,評(píng)論需要通過(guò)像Disqus這樣的服務(wù)在外部托管。
聯(lián)系表格還需要通過(guò)Google表格等外部合作伙伴重新發(fā)送。簡(jiǎn)而言之,您將失去對(duì)此類動(dòng)態(tài)內(nèi)容的直接控制,因?yàn)樗鼈兊捻憫?yīng)未存儲(chǔ)在您的服務(wù)器上。
頻繁構(gòu)建不方便: 靜態(tài)站點(diǎn)也存在頻繁重新轉(zhuǎn)換的問(wèn)題。只有在重新生成頁(yè)面并將其重新上傳到服務(wù)器后,您在網(wǎng)站上所做的任何更改才會(huì)反映出來(lái)。
技術(shù)專長(zhǎng): Gatsby建立在ReactJS和GraphQL之上。因此,需要一些JavaScript知識(shí)和GraphQL的基本概念來(lái)處理網(wǎng)站并將其移植到Gatsby。
靜態(tài)網(wǎng)站非常適合那些正在尋找具有高安全性的低成本解決方案的人。一些用例是自由職業(yè)者的投資組合網(wǎng)站和產(chǎn)品演示網(wǎng)站。
如果您認(rèn)為好處大于缺點(diǎn),那就太好了!我們現(xiàn)在將嘗試設(shè)置Gatsby以與我們的WordPress站點(diǎn)集成。
我們?cè)诒窘坛讨袠?gòu)建的Gatsby站點(diǎn)的最新版本在GitHub上可供您使用。
第1步:設(shè)置Gatsby
在本節(jié)中,我們將了解如何安裝Gatsby并使用Gatsby創(chuàng)建一個(gè)基本的靜態(tài)站點(diǎn)。
先決條件
開始使用Gatsby的第一步是檢查其先決條件。Gatsby通過(guò)npm(NodeJS包安裝程序)提供服務(wù)。因此,在安裝Gatsby之前,您的環(huán)境中需要NodeJS和npm。此外,Gatsby要求您安裝源代碼管理系統(tǒng)Git。
如果您運(yùn)行的是Windows,您可以通過(guò)下載頁(yè)面上的安裝程序安裝NodeJS和Git。在Mac上,您可以下載他們的安裝程序或使用自制軟件。
brew install nodejs brew install git
如果您運(yùn)行的是Linux操作系統(tǒng),則可以通過(guò)apt之類的包安裝程序安裝NodeJS。
sudo apt update sudo apt install nodejs git
安裝Gatsby
成功安裝NodeJS和Git后,就可以安裝Gatsby了!最簡(jiǎn)單的方法是在終端上運(yùn)行以下命令(在Windows上使用命令行npm):
npm install -g gatsby-cli
安裝程序首先安裝依賴項(xiàng),然后安裝Gatsby。您現(xiàn)在已準(zhǔn)備好創(chuàng)建您的第一個(gè)Gatsby站點(diǎn)。
構(gòu)建和部署您的Gatsby站點(diǎn)
運(yùn)行以下命令以創(chuàng)建Gatsby站點(diǎn)。
gatsby new gatsby-wordpress
Gatsby通過(guò)克隆Gatsby入門模板在目錄/gatsby-wordpress中創(chuàng)建一個(gè)站點(diǎn)。您可以提供不同的入門模板進(jìn)行克隆??寺⊥瓿刹惭b依賴項(xiàng)后,您可以使用以下命令運(yùn)行站點(diǎn)的開發(fā)版本。
cd gatsby-wordpress gatsby develop
然后,您可以在http://localhost:8000訪問(wèn)該站點(diǎn)的開發(fā)版本。
Gatsby入門網(wǎng)站
最后一步是構(gòu)建您的靜態(tài)站點(diǎn)。以下命令在公共目錄中創(chuàng)建靜態(tài)文件。要將其上傳到服務(wù)器,您只需將該目錄的內(nèi)容上傳到服務(wù)器的根目錄即可。您可能希望添加像www.example.com/blog/這樣的路徑前綴作為構(gòu)建的根URL。
gatsby build
要在本地啟動(dòng)HTML服務(wù)器以顯示您網(wǎng)站的這種靜態(tài)形式,您需要使用serve 命令。請(qǐng)注意,它僅在運(yùn)行build命令后才有效。
gatsby serve
現(xiàn)在您已經(jīng)從Gatsby成功創(chuàng)建了一個(gè)基本的靜態(tài)站點(diǎn),讓我們嘗試將其與WordPress集成。
第2步:如何將Gatsby連接到WordPress
在本節(jié)中,您將把您的WordPress網(wǎng)站與Gatsby集成。您可以將Gatsby指向您的WordPress博客的地址,以使其在您運(yùn)行開發(fā)服務(wù)器或生成靜態(tài)頁(yè)面時(shí)能夠提取最新數(shù)據(jù)。
將Gatsby連接到WordPress的過(guò)程是獲取由構(gòu)建觸發(fā)的WordPress數(shù)據(jù)。Gatsby獲取WordPress數(shù)據(jù)后,它會(huì)根據(jù)當(dāng)前模板創(chuàng)建靜態(tài)站點(diǎn)。
該過(guò)程使用WordPress站點(diǎn),該站點(diǎn)具有Gatsby上的文章的來(lái)源。為了方便這種交流,您需要通過(guò)以下命令安裝Gatsby的WordPress插件:
npm install gatsby-source-wordpress
配置Gatsby
接下來(lái),將此插件添加到Gatsby的配置文件gatsby-config.js中。
然后,將以下代碼添加到文件中以將Gatsby連接到您的WordPress源。在此示例中,我們?cè)贛AMP上使用本地托管的WordPress站點(diǎn)。在旁注中,您可能希望在siteMetadata中編輯站點(diǎn)的標(biāo)題和描述。
module.exports = {
siteMetadata: {
...
},
plugins: [
...
{
resolve: `gatsby-source-wordpress`,
options: {
// Specify the URL of the WordPress source
baseUrl: `localhost:8888/wordpress`,
protocol: `http`,
// Indicates if a site is hosted on WordPress.com
hostingWPCOM: false,
// Specify which URL structures to fetch
includedRoutes: [
'**/posts',
'**/tags',
'**/categories'
]
}
}
使用GraphQL獲取文章
在配置文件中指定WordPress站點(diǎn)的來(lái)源后,您需要指定需要從WordPress站點(diǎn)提取哪些數(shù)據(jù)。Gatsby使用GraphQL(一種用于API的開源查詢語(yǔ)言)來(lái)批量獲取WordPress文章。
在最終確定要選擇的查詢之前,您可以交互地選擇需要從WordPress獲取的內(nèi)容。運(yùn)行開發(fā)服務(wù)器并轉(zhuǎn)到URL:http://localhost:8000/___graphql以打開GraphQL編輯器。
使用GraphQL查詢數(shù)據(jù)
完成要拉取的內(nèi)容后,可以將GraphQL查詢添加到文件index.js。
現(xiàn)在讓我們只從每個(gè)文章中提取標(biāo)題和摘錄。我們可以稍后添加更多字段。
import React from "react"
import { graphql } from "gatsby"
import Layout from "../components/layout"
import SEO from "../components/seo"
export default ({ data }) => {
return (
Posts
{data.allWordpressPost.edges.map(({ node }) => (
{node.title}
))}
)
}
export const pageQuery = graphql`
query {
allWordpressPost(sort: { fields: [date] }) {
edges {
node {
title
excerpt
}
}
}
}
當(dāng)您檢查開發(fā)站點(diǎn)時(shí),您會(huì)注意到所有來(lái)自WordPress的文章都已被拉取,并顯示了它們的標(biāo)題和摘錄:
帶有WordPress文章的Gatsby主頁(yè)
雖然這看起來(lái)不太漂亮,但您已經(jīng)成功地從WordPress中提取了相關(guān)數(shù)據(jù)。下一步是為每個(gè)文章創(chuàng)建一個(gè)新頁(yè)面。
第3步:創(chuàng)建基本頁(yè)面模板
在本節(jié)中,您將觸發(fā)Gatsby為您的WordPress站點(diǎn)的每個(gè)頁(yè)面創(chuàng)建一個(gè)文章,并通過(guò)slug包含指向這些文章的鏈接。
為每個(gè)文章創(chuàng)建一個(gè)頁(yè)面
從WordPress源中提取所有文章后的第一步是指示Gatsby為每個(gè)文章創(chuàng)建一個(gè)頁(yè)面。這是使用動(dòng)作完成的createPage 動(dòng)作。
將以下代碼添加到gatsby-node.js。請(qǐng)注意,我們還獲取了每個(gè)文章的內(nèi)容、作者、日期和slug:
const path = require(`path`)
exports.createPages = ({ graphql, actions }) => {
const { createPage } = actions
return graphql(`
{
allWordpressPost(sort: {fields: [date]}) {
edges {
node {
title
excerpt
slug
date(formatString: "MM-DD-YYYY")
author {
name
}
}
}
}
}
`).then(result => {
result.data.allWordpressPost.edges.forEach(({ node }) => {
createPage({
// Decide URL structure
path: node.slug,
// path to template
component: path.resolve(`./src/templates/blog-post.js`),
context: {
// This is the $slug variable
// passed to blog-post.js
slug: node.slug,
},
})
})
})
從GraphQL提取數(shù)據(jù)后,代碼為每個(gè)文章創(chuàng)建一個(gè)頁(yè)面。在文章中,您可以使用路徑基于slug指定頁(yè)面的URL結(jié)構(gòu)。
或者,您可以獲取文章的ID并在URL中指定。組件變量指向需要渲染文章的模板。最后,我們將slug作為模板的上下文傳遞。這是模板從獲取的文章列表中查詢正確文章所必需的。
理想情況下,您需要傳遞一個(gè)將文章唯一標(biāo)識(shí)為上下文的變量。
更改gatsby-node.js文件后重新啟動(dòng)開發(fā)服務(wù)器以使更改生效。
創(chuàng)建模板以顯示文章
在src目錄中創(chuàng)建目錄模板。在模板目錄中創(chuàng)建一個(gè)新文件blog-post.js并輸入以下代碼:
import React from "react"
import Layout from "../components/layout"
import { graphql } from "gatsby"
export default ({ data }) => {
const post = data.allWordpressPost.edges[0].node
console.log(post)
return (
{post.title}
By: {post.author.name}
On: {post.date}
)
}
export const query = graphql`
query($slug: String!) {
allWordpressPost(filter: { slug: { eq: $slug } }) {
edges {
node {
title
content
slug
date(formatString: "MM-DD-YYYY")
author {
name
}
}
}
}
}
GraphQL查詢獲取日期和作者姓名,它們顯示在文章的末尾。您可以使用GraphQL編輯器獲取其他字段并將它們顯示在文章頁(yè)面上。
鏈接到索引中的頁(yè)面
您為每個(gè)文章創(chuàng)建了一個(gè)新頁(yè)面。但是,您需要從索引頁(yè)面添加指向這些文章的鏈接。前往index.js并修改代碼以將鏈接添加到每個(gè)文章:
import React from "react"
import { Link, graphql } from "gatsby"
import Layout from "../components/layout"
import SEO from "../components/seo"
export default ({ data }) => {
return (
My WordPress Blog
Posts
{data.allWordpressPost.edges.map(({ node }) => (
{node.title}
))}
)
}
export const pageQuery = graphql`
query {
allWordpressPost(sort: { fields: [date] }) {
edges {
node {
title
excerpt
slug
}
}
}
}
以下是索引頁(yè)面的狀態(tài):
添加文章鏈接后的索引頁(yè)面
單擊文章鏈接時(shí),這里是博客文章頁(yè)面,由blog-post.js呈現(xiàn):
帶有標(biāo)題、內(nèi)容、創(chuàng)建日期和作者的博客文章
第4步:高級(jí)遷移任務(wù)
雖然您可能已成功導(dǎo)入每個(gè)WordPress文章,但讓我們執(zhí)行一些高級(jí)任務(wù)以確保您將來(lái)不會(huì)遇到問(wèn)題。在本節(jié)中,您可以有效地處理圖像并將上次修改日期時(shí)間戳添加到您的數(shù)據(jù)中。
圖像路徑轉(zhuǎn)換
我們的原始文章之一,“Post with Image!” 里面有一張圖片。如果你在Gatsby上移動(dòng)到相應(yīng)的頁(yè)面,你會(huì)注意到圖片顯示出來(lái)了,但是圖片的來(lái)源和WordPress的一樣。在此示例中,它指向本地托管的WordPress圖像。
Gatsby發(fā)布圖片及其來(lái)源
如果您在外部托管圖像,這不會(huì)造成問(wèn)題,因?yàn)槟鷮⒗^續(xù)指向您的圖像服務(wù)器。但是,如果您將圖像存儲(chǔ)在WordPress安裝中,您也需要獲取帶有文章的圖像!
這是由inline images插件解決的。首先,安裝插件gatsby-image,然后安裝。gatsby-wordpress-inline-images
npm install gatsby-image npm install gatsby-wordpress-inline-images
接下來(lái),將以下行添加到您的gatsby-config.js 文件中。
module.exports = {
siteMetadata: {
...
},
plugins: [
...
{
resolve: `gatsby-source-wordpress`,
options: {
...
// If useACF is true, then the source plugin will try to import the WordPress ACF Plugin contents.
// This feature is untested for sites hosted on WordPress.com
useACF: true,
plugins: [
{
resolve: `gatsby-wordpress-inline-images`,
options:
{
baseUrl: `localhost:8888/wordpress`,
protocol: `http`
}
}
]
}
}
],
}
進(jìn)行這些更改后重新啟動(dòng)開發(fā)服務(wù)器將從WordPress站點(diǎn)下載圖像并將其存儲(chǔ)在本地。您可以從同一圖像的路徑中驗(yàn)證這一點(diǎn)。
顯示上次修改日期
如果您管理一個(gè)定期更新文章的博客,您可能希望在最后一次更新文章時(shí)通知讀者。雖然您之前在GraphQL查詢中提取了“created date”,但本節(jié)也將告訴您如何提取“l(fā)ast modified”時(shí)間戳。
要將WordPress的最后修改時(shí)間戳添加到您的Gatsby文章中,您需要將修改后的字段添加到GraphQL查詢中的項(xiàng)目列表中。它是一個(gè)時(shí)間戳date,所以你還需要添加參數(shù)formatString。這是修改后的blog-post.js文件:
...... export const query = graphql` query($slug: String!) { { allWordpressPost { edges { node { ... modified(formatString: "MM-DD-YYYY") } } } } ...On: {post.date}
Last modified: {post.modified}
添加后,您將能夠在Gatsby的博客文章頁(yè)面上看到上次修改的時(shí)間戳:
使用最后修改的時(shí)間戳發(fā)布
小結(jié)
決定利用Gatsby將您的WordPress網(wǎng)站轉(zhuǎn)換為靜態(tài)網(wǎng)站可能是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。為此,您應(yīng)該執(zhí)行以下步驟:
- 安裝Gatsby以構(gòu)建起始站點(diǎn)
- 通過(guò)GraphQL將Gatsby連接到WordPress源
- 為博客文章創(chuàng)建模板
- 從WordPress導(dǎo)入所有圖像
- 顯示來(lái)自WordPress的最后修改時(shí)間戳
網(wǎng)站標(biāo)題:如何使用Gatsby為WordPress生成靜態(tài)網(wǎng)站
轉(zhuǎn)載來(lái)源:http://www.dlmjj.cn/article/dpggeio.html


咨詢
建站咨詢
