:是現代的網站開發框架,用於構建默認情況下快速運行的網站和應用,利用vue.js建構超快網站的JAMstack(javascript, api, markup) 建構的技術堆疊。
什麼是堆疊呢? 當談論到堆疊的時候,不談論後端語言或資料庫,是一種建構網站的新方法,可提供較好的效能。
而什麼不是JAMstack的網站呢? 客戶端和伺服器之間緊密耦合的任何專案都不是使用JAMstack構建的。
生成靜態HTML文件以創建SEO友好的標記,一旦將其加載到瀏覽器中,該標記就會合併到由Vue.js驅動的SPA中。
從本地文件或外部API獲取內容,將數據存在本地數據庫,graphQL讓你從數據庫提取只需要的數據,並在vue.js組建使用,數據在建構時生成並存成靜態的json。
JAM 是數據驅動的,使用graphQL層從不同源獲取數據,以便動態產生頁面。
使用vue.js, graphQL,webpack來建構網站。
yarn global add @gridsome/cli
使用yarn語法之前,要先安裝homebrew,在終端機輸入/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果command line te (CLT)無法安裝(Xcode的新版本不自动安装Command Line Tools了)出現這個錯誤的話,參考這篇文章解決。
xcode-select: error: invalid developer directory '/Library/Developer/CommandLineTools'
Failed during: /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools
brew update
安裝過brew的話就更新一下,保持最新版本。brew install yarn
透過brew來安裝yarn。brew upgrade yarn
如果有更新yarn可以下這段語法。gridsome create my-gridsome-site
創建一個新項目。cd my-gridsome-site
部署方法:
gridsome develop
在以下位置啟動本地開發服務器 http://localhost:8080
,可以在 http://localhost:8080/___explore
看到graphQL 的資料。gridsome build
初始化 -讀取項目配置並初始化已安裝的插件等。
加載源 -源插件獲取其數據並更新內部存儲。
創建GraphQL模式 -根據商店中的節點類型生成GraphQL模式。
生成代碼 -生成運行時代碼,例如路由,插件等。
引導完成 -創建包含所有頁面和模板的渲染隊列。
運行GraphQL-執行所有page-query查詢並將結果存儲在json文件中。
編譯資產 -運行webpack來編譯可投入生產的資產。
渲染 HTML-將所有頁面和模板渲染為靜態html文件。
處理文件 -本地文件被複製到dist文件夾中。
處理圖像 -處理本地圖像並將其複製到dist文件夾中。安裝vetur
套件,可以讀vue的語法,讓他有顏色。
npm install -D sass-loader@7.1.0 node-sass
(7.1.0比較沒有問題)npm install -D pug gridsome- plugin-pug
mac: yarn add -D pug gridsome-plugin-pug
// gridsome.config.js 加上這段
module.exports = {
plugins: [
{
use: 'gridsome-plugin-pug',
options: {
pug: { /* Options for `pug-plain-loader` */ },
pugLoader: { /* Options for `pug-loader` */ }
}
}
]
};
在pages底下建立blogHtml
folder,然後建立blogPostOne.vue
的檔案,新增和About.vue
幾乎一樣的內容。
// blogPostOne.vue
<template>
<Layout>
<h1>blog post one</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error doloremque omnis animi, eligendi magni a voluptatum, vitae, consequuntur rerum illum odit fugit assumenda rem dolores inventore iste reprehenderit maxime! Iusto.</p>
</Layout>
</template>
<script>
export default {
metaInfo: {
title: "blog post one"
}
};
</script>
此時輸入資料夾對應的網址,就可以看到畫面。 http://localhost:8080/blog-html/blog-post-one
如果我們使用的Layout不同該怎麼辦呢?
首先先在Layouts資料夾裡面新增一個Blog.vue的layout,把Default.vue的內容複製過去,假設上面舉的例子blogPostOne.vue
,把layout改成新的Blog Layout,
// blogPostOne.vue
<template>
// 改成新的 BlogLayout
<BlogLayout>
<h1>blog post one</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error doloremque omnis animi, eligendi magni a voluptatum, vitae, consequuntur rerum illum odit fugit assumenda rem dolores inventore iste reprehenderit maxime! Iusto.</p>
</BlogLayout>
</template>
<script>
export default {
metaInfo: {
title: "blog post one"
}
};
</script>
這裡的BlogLayout
怎麼使用來的呢? 有兩種做法:區域註冊以及全域註冊。
1. 全域註冊
做法和Layout相同,先到main.js
,註冊import
元件,接著再export的時候宣告該元件的使用,不必在區域中再宣告,可以直接使用。
// main.js
import BlogLayout from '~/layouts/Blog.vue'
export default function (Vue, { router, head, isClient }) {
// Set default layout as a global component
Vue.component('Layout', DefaultLayout)
// use Blog component in global
Vue.component('BlogLayout', BlogLayout)
}
components
,表示元件的使用。// blogPostOne.vue
<script>
// ~ 表示src資料夾
import BlogLayout from "~/layouts/Blog.vue";
export default {
components: { BlogLayout },
metaInfo: {
title: "blog layout us"
}
};
</script>
如果沒有重新整理的話,按下ctrl+c
終止終端機的程序,再執行一次gridsome develop
。
前方提到,我們可以拜訪http://localhost:8080/___explore
來看grapgQL的部分,輸入該網址後,可以到playground的地方,右邊 docs
的部分可以點開看提示。
在左側輸入
query {
metadata {
// siteName 在 gridsome.config.js 裡面
siteName
}
}
// result
{
"data": {
"metadata": {
"siteName": "my Gridsome site"
}
}
}
或是
query {
allPage{
path
}
}
// result
{
"data": {
"allPage": [
{
"path": "/404/"
},
{
"path": "/about/"
},
{
"path": "/"
},
{
"path": "/team/"
},
{
"path": "/blog-html/blog-post-one/"
}
]
}
}
可以看到結果。
屏東人,前端工程師,愛泰人。