官網(wǎng): https://gridsome.org
靜態(tài)網(wǎng)站生成器:

是使用一系列配置、模板以及數(shù)據(jù),生成靜態(tài)HTML文件及相關(guān)資源的工具。" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢(xún) 在線咨詢(xún)
18143453325 在線咨詢(xún)
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > 靜態(tài)站點(diǎn)生成

靜態(tài)站點(diǎn)生成

時(shí)間:2023-04-30 00:30:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-04-30 00:30:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

靜態(tài)站點(diǎn)生成:

Gridsome基礎(chǔ)

介紹

Gridsome 是一個(gè)免費(fèi)、開(kāi)源、基于Vue.js 技術(shù)棧的靜態(tài)網(wǎng)站生成器。
官網(wǎng): https://gridsome.org
靜態(tài)網(wǎng)站生成器:

  1. 是使用一系列配置、模板以及數(shù)據(jù),生成靜態(tài)HTML文件及相關(guān)資源的工具。
  2. 生成的網(wǎng)站不需要類(lèi)似 PHP 這樣的服務(wù)器,只需要放到支持靜態(tài)網(wǎng)站的 Web Server 或 CDN 上即可運(yùn)行。
常見(jiàn)的靜態(tài)網(wǎng)站生成器:

  1. gridsome (Node/vue)
  2. gatsby (Node/react)
  3. Jekyll (Ruby)
  4. Hexo (Node)
  5. Hugo (Golang)
  6. 另外,Nuxt.js , Next.js 也能生成靜態(tài)網(wǎng)站,但是它們更多的被認(rèn)為是 服務(wù)端渲染 (SSR) 框架
它們也叫 JAMStack : Javascript 、API 、Markup的首字母組合。本質(zhì)上是一種胖前端,通過(guò)調(diào)用各種API來(lái)實(shí)現(xiàn)更多的功能。

使用場(chǎng)景:

  1. 不適合有大量路由頁(yè)面的應(yīng)用
  2. 不適合有大量動(dòng)態(tài)內(nèi)容的應(yīng)用
  3. 適合 博客、企業(yè)網(wǎng)站等

創(chuàng)建項(xiàng)目

// 安裝npm install --global @gridsome/cli// 創(chuàng)建項(xiàng)目gridsome create <project> 1. Install dependencies 時(shí),Ctrl + c 打斷 2. rm -rf node_modules 3. npm install cd <project>// 啟動(dòng)windowgridsome develop // localhost:8080或npm run developgridsome 依賴(lài) sharp 模塊,處理圖片。它包含C++,很難安裝。

// 先安裝 sharpnpm config set sharp_binary_host "https://npm.taobao.org/mirrors/sharp"npm config set sharp_libvips_binary_host "https://npm.taobao.org/mirrors/sharp-libvips"// 安裝 gridsome時(shí)自動(dòng)安裝 sharp// npm install sharp 安裝 sharp 依賴(lài)的 C++ 環(huán)境

npm install --global --production windows-build-tools// 必須要安裝Python 進(jìn)行編譯,windows-build-tools 中有

預(yù)渲染

// 安裝靜態(tài)服務(wù)npm install -g serve// 執(zhí)行部署的目錄serve dist// 通過(guò) npm run build 打包的文件,可以直接部署到服務(wù)器上

目錄結(jié)構(gòu)

? src 目錄:

  1. main.js : 項(xiàng)目的啟動(dòng)入口
  2. pages/ : 頁(yè)面組件
  3. template/ : 節(jié)點(diǎn)集合的組件
  4. layouts/ : 頁(yè)面布局組件
  5. components/ : 公共組件
  6. .temp/ : 自動(dòng)生成的臨時(shí)文件

項(xiàng)目配置

// gradsome.config.js官方文檔 config

Pages

創(chuàng)建:

  1. 文件組件
  2. pages/Index.vue ——> '/'
  3. pages/AboutUs.vue ——> '/about-us/'
  4. pages/dab/Index.vue ——> '/dab/'
  5. API 方式
``` // gridsome.server.js api.createPages(({ createPage}) => { createPage({ path: '/my-page', component: './src/templates/MyPage.vue' }) })

// templates/MyPage.vue

```

動(dòng)態(tài)路由:

  1. 基于文件的動(dòng)態(tài)路由
  2. src/pages/user/[id].vue ——> /user/:id
  3. 基于API 創(chuàng)建動(dòng)態(tài)路由



js // gridsome.server.js api.createPages(({ createPage}) => { createPage({ path: '/user/:id(//d+)', component: './src/templates/User.vue' }) })


重寫(xiě)路由規(guī)則

metaInfo

// Index.vuemetaInfo: { tutle: '', meta: [ {name: '', content: ''} ]}404頁(yè)面: src/pages/404.vue

添加集合 Collections

// 第三方模擬測(cè)試接口jsonplaceholder.typicode.com集合用于承載數(shù)據(jù),gridsome 運(yùn)用模板將集合渲染成頁(yè)面。

Data Sources ——> Collections ——> Nodes

// gridsome.server.jsconst axios = require('axios')module.exports = function (api) { api.loadSource(({ addCollection }) => { const collection = addCollection('Post') const { data } = await axios.get('jsonplaceholder.typicode.com/posts') for(const item in data){ collection.addNode({ id: item.id, title: item.title, content: item.body }) } })}

在GraphQL中查詢(xún)數(shù)據(jù)

GraphQL: 一種用于 API 的查詢(xún)語(yǔ)言。GraphQL 對(duì)你的 API 中的數(shù)據(jù)提供了一套易于理解的完整描述,使得客戶(hù)端能夠準(zhǔn)確地獲得它需要的數(shù)據(jù)。
// localhost:8080/__explorequery { post (id: 2){ id title }}

在頁(yè)面中查詢(xún)GraphQL

// 頁(yè)面中<div>{{ $page.books }}</div><page-query> query{ books: allBooks{ } }</page-query>// 組件中<static-query> query{ }</static-query>// 頁(yè)面鏈接<g-link></g-link>

使用模板渲染節(jié)點(diǎn)頁(yè)面

// template/Post.vue<g-link :to="$page.post.path"></g-link><page-query> query($id: ID!){ // ID類(lèi)型,不能為空 post (id: $id){ id title content path } }</page-query>// gridsome.config.jsmodule.exports = { templates: { Post: [ { path: '/posts/:id', component: './src/templates/Post.vue' } ] }}

Gridsome案例

創(chuàng)建項(xiàng)目

個(gè)人博客, 分頁(yè),數(shù)據(jù)管理

// 創(chuàng)建項(xiàng)目gridsome create blog-with-gridsome// 啟動(dòng) npm run develop

處理首頁(yè)模板

使用 github 上的 startbootstrap-clean-blog 模板,

git clone https://github.com/cuihuale2021/startbootstrap-clean-blog.git --depth=1 #使用最新版本// 放到同一個(gè)編輯器中cd startbootstrap-clean-blog/code -a .static 文件夾下的圖片不會(huì)進(jìn)行打包編譯。它是直接暴露給服務(wù)端的,引用時(shí) “/img/abc.png”

處理其他頁(yè)面模板

nav, footer 放到 layouts/Default.vue 布局組件中

使用本地MD文件管理文章內(nèi)容

Markdown 插件

npm install @gridsome/source-filesystem// 配置插件 gridsome.config.jsmodule.exports = { siteName: 'Gridsome', plugins: [ { use: '@gridsome/source-filesystem', options: { typeName: 'BlogPost', path: './content/blog/**/*.md', } } ]}// 安裝轉(zhuǎn)換器npm install @gridsome/transformer-remark // 將 md 文件轉(zhuǎn)為 html

Strapi

Strapi 介紹

通用的內(nèi)容管理系統(tǒng),后臺(tái)管理文章
官網(wǎng): http://strapi.io
博客文章,商品,用戶(hù)評(píng)論,用戶(hù)等。

Strapi 的基本使用

// 安裝npx create-strapi-app my-app --quickstart在創(chuàng)建好的后臺(tái)管理系統(tǒng)中,添加字段、編輯內(nèi)容。

使用 Strapi 接口數(shù)據(jù)

角色和權(quán)限中,設(shè)置接口的權(quán)限

使用 postman 測(cè)試接口

localhost:1337/posts

訪問(wèn)受保護(hù)的API

分配權(quán)限,創(chuàng)建用戶(hù)

在postman 中登錄,獲取Token, 在進(jìn)行 接口測(cè)試

// 登錄localhost:1337/auth/local// 接口測(cè)試localhost:1337/posts

通過(guò) GraphQL 訪問(wèn) Strapi

// 安裝 GraphQLyarn strapi install graphqlnpm run strapi install graphqlstrapi install graphql // 已全局安裝 strapi可視化安裝:

? 后臺(tái)面板 ——> 市場(chǎng) ——> 插件

// 訪問(wèn)npm run developlocalhost:1337/graphql

將 strapi 數(shù)據(jù)預(yù)取到 Gridsome

// 在 gridsome 中使用插件npm install @gridsome/source-strapi// 在 gridsome.config.js 中配置插件重啟服務(wù),拉取最新數(shù)據(jù)

設(shè)計(jì)文章和標(biāo)簽數(shù)據(jù)模型

post ——> Tags, 多對(duì)多的關(guān)系

展示文章列表

graphql 中可以查詢(xún)到的數(shù)據(jù),放到頁(yè)面查詢(xún)、賦值

文章列表分頁(yè)

使用@paginate 指令完成分頁(yè)

// index.vuequery ($page: Int){ posts: allStrapiPost(perpage: 2, page: $page) @paginate{ // perpage 每頁(yè)多少條 page 當(dāng)前頁(yè) pageInfo { totalPages currentPage } edges { // 數(shù)據(jù) } }}// 分頁(yè)頁(yè)碼的顯示import { Pager } from 'gridsome' //... components: { Pager }// 使用組件<Pager :info="$page.posts.pageInfo" />

展示文章詳情

詳情頁(yè)使用模板,不同的類(lèi)型展示不同的頁(yè)面

// gridsome.config.jstemplates: { StrapiPost: [ // 集合的名字 source-strapi 生成的, typeName + contentTypes { path: '/post/:id', component: './src/templates/Post.vue' } ]}/換成/ a鏈接會(huì)刷新頁(yè)面

query($id: ID!){ // 文章id 為 ID類(lèi)型,非空 post: strapiPost(id: $id){ // 設(shè)置別名為 post // ... }}// 封面圖:style = "{ backgroundImage: `url(http://localhost:1337${ $page.post.cover.url })`}"// 文章內(nèi)容v-html="$page.post.content"

處理Markdown格式的文章

還是使用第三方包 markdown-it 插件

npm install markdown-it// 使用var MarkdownIt = require('markdown-it'),md = new MarkdownIt()methods: { mdToHtml(content) { return md.render(content) }}v-html="mdToHtml( $page.post.content )"

文章標(biāo)簽

// sourc-strapi 中配置contentTypes: ['post', 'tag']查詢(xún)、遍歷到模板

基本設(shè)置

標(biāo)題、副標(biāo)題、封面

Strapi 中創(chuàng)建單一節(jié)點(diǎn)

// source-strapi 插件配置singleTypes: ['general'],查詢(xún)、賦值

聯(lián)系我

表單不需要預(yù)渲染,使用正常的客戶(hù)端請(qǐng)求即可

Strapi ——> 創(chuàng)建集合 Concat ——> 設(shè)置表單字段 ——> 設(shè)置權(quán)限

// 安裝 axiosnpm install axios

部署 Strapi

gridsome博客項(xiàng)目,可以部署到任何的服務(wù)器環(huán)境中

Strapi 項(xiàng)目需要部署到Node.js 環(huán)境中

服務(wù)器 + 數(shù)據(jù)庫(kù)

// strapi config/database.jsclient: "" // 默認(rèn)使用“sqlite” 數(shù)據(jù)庫(kù),可以改為 Mongodb, mysql// 官網(wǎng) mysql 的配置選項(xiàng)strapi 部署的服務(wù)器,和數(shù)據(jù)庫(kù)同一個(gè)服務(wù)器的話, host 為 “l(fā)ocalhost”

// 安裝mysqlnpm install mysql代碼提交到gitee 或 github, 在服務(wù)器遠(yuǎn)程拉取下載

git clone xxxxcd xxx/npm install npm run buildnpm run start// 持久運(yùn)行 pm2 start npm -- run start --name blog-backend// 訪問(wèn)xxx.xx:1337/admin設(shè)置接口、權(quán)限、測(cè)試接口

把本地服務(wù)聯(lián)通遠(yuǎn)程 strapi

// gridsome.config.jsapiUrl: '', // 遠(yuǎn)程strapi地址可以創(chuàng)建環(huán)境變量: .env.development 和 .env.production 文件

// 客戶(hù)端訪問(wèn)GRIDSOME_API_URL = ""apiUrl: process.env.GRIDSOME_API_URLVue.mixin() 將環(huán)境變量混入到實(shí)例,全局使用

部署 Gridsome 應(yīng)用

自動(dòng)構(gòu)建部署: http://vercel.com ——> 網(wǎng)站托管服務(wù)

本地項(xiàng)目推入github, vercel 導(dǎo)入github中的項(xiàng)目。

自動(dòng)更新:

1. Vercel ——> 項(xiàng)目 ——> Settings ——> Deploy Hooks ——> 創(chuàng)建并復(fù)制2. Strapi ——> 設(shè)置 ——> webhook

關(guān)鍵詞:靜態(tài)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉