WordPress Destekli Web Siteleri İçin Gatsby Temaları Oluşturma

Yayınlanan: 2022-03-10
Kısa özet ↬ Halihazırda bir Gatsby teması oluşturup yayınladınız mı? Bu makalede Paulina Hetman, Gatsby temalarının nasıl çalıştığını ve Gatsby temalarını WordPress benzerleriyle karşılaştırarak hangi sorunları çözebileceklerini açıklıyor.

Gatsby, React üzerine inşa edilmiş açık kaynaklı bir çerçevedir. Gatsby ile (neredeyse) her yerden veri çekebilir ve statik veya dinamik web siteleri oluşturmak için kullanabilirsiniz. Veriler, kesinlikle WordPress'i masaya getiren bir CMS'den alınabilir. İçeriğinizi bir WordPress panosu aracılığıyla yönetmeye devam ederken statik bir web sitesinin avantajlarından (hız, güvenlik, statik barındırma) yararlanırsınız.

Gatsby çerçevesinin özelliklerinden biri, temaları bir kişiselleştirme aracı olarak önermesidir. WordPress'te güçlü bir geçmişe sahip biri olarak, Gatsby temaları konseptini özellikle çekici buluyorum. WordPress temaları tasarlar ve geliştirirdim. Ancak, Jamstack çözümlerine artan ilgi ile yavaş yavaş WordPress ile başsız bir CMS olarak çalışmaya yöneldim. Bu yazıda bu geçişten öğrendiğim bazı kavramları paylaşmak istiyorum.

Not: Daha ileri gitmeden önce, kullanacağımız araçlara odaklanalım. Gatsby, resmi bir gatsby-source-wordpress eklentisi sağlar. Çalışması için WordPress sonumuzu hazırlamamız gerekiyor. Daha doğrusu, Gatsby aromalı WordPress verilerini bir GraphQL API aracılığıyla göstermemiz gerekiyor. Pratikte bu, iki WordPress eklentisi WPGraphQL ve WPGatsby yüklemek anlamına gelir. Her ikisine de resmi WordPress eklenti deposu aracılığıyla erişilebilir ve herhangi bir yapılandırma gerektirmez.

Gatsby Temaları Nelerdir?

Gatsby teması, bir Node.js paketi içinde özetlenen bir grup paylaşılan işlevselliktir. Bu nedenle bir temanın (npm gibi bir kayıt defterine) yayınlanması ve kurulabilir bir bağımlılık olarak yeniden kullanılması hedeflenir.

Burada Gatsby ve WordPress'ten bahsettiğimiz için hemen açıklayacağım - WordPress temalarıyla benzerlikler var, ancak WordPress temaları kavramını Gatsby temaları ile eşitlememeliyiz. WordPress geçmişine sahip biri için (benim gibi), ayrışma başlangıçta zor olabilir.

Bir WordPress teması , ön uçta gördüklerimizi tanımlayan zorunlu bir şablonlar sistemidir. İyi bir WordPress temasının sorumluluğu burada sona erer. İşlevler eklentilerin alanı olduğundan herhangi bir işlevsellik getirmemelidir. Bu nedenle, WordPress ekosisteminde temalar ve eklentiler arasında kesin bir ayrım vardır. Temalar sunum katmanıyla, eklentiler ise işlevsel yönlerle ilgilenmelidir.

Gatsby tanımını takiben, temalar işlevlerden sorumludur . O zaman onlara eklenti dememiz gerekmez mi? Aslında Gatsby, WordPress gibi hem eklentilere hem de temalara sahiptir. Eklentiler, tıpkı temalar gibi, Gatsby API'lerini uygulayan yüklenebilir Node.js paketleridir. Ve aslında, bir Gatsby teması bir Gatsby eklentisidir. Bir eklenti bir sitede bir bölüme, sayfaya veya sayfanın bir kısmına sahipse buna tema deriz.

Eklentileri ve temaları oval kümeler olarak temsil eden bir illüstrasyon. WordPress eklentileri ve temaları ayrı kümelerdir, çünkü Gatsby temaları eklentilerin bir alt kümesidir.
WordPress ve Gatsby'de eklentiler ve temalar arasındaki ilişki. (Büyük önizleme)

Ayrıca, WordPress'ten farklı olarak Gatsby, bir site oluşturmak için temaların kullanılmasını gerektirmez. Bunun yerine, muhtemelen aşağıdaki gibi yapılandırılmış bir proje oluşturarak sitenizi oluşturmaya başlarsınız:

Solda, düğüm modülleri, Bileşenler, Sayfalar ve Şablonlar içeren src, gatsby-config.js ve gatsby-node.js dosyasını içeren bir klasör yapısının resmi. İki ok sağdaki bilgisayar ekranını gösteriyor. Biri klasör yapısında başlar, diğeri WP simgesinde başlar.
Gatsby projenizi tipik olarak nasıl yapılandırdığınız. (Büyük önizleme)

Korumak için birden fazla siteniz olana kadar sorun değil. Bu durumda, sürecin ortak kısımlarını soyutlamak ve bunları ayrı ayrı yönetmek (sürüm ve güncelleme) isteyebilirsiniz.

Solda, düğüm modülleri, Bileşenler, Sayfalar ve Şablonlar içeren src, gatsby-config.js ve gatsby-node.js dosyasını içeren bir klasör yapısının resmi. src'nin bir kısmı, gatsby-config.js ve gatsby-node.js birlikte çevrelenmiştir. Bu kısım metinlerle bağlantılıdır: tüm Gatsby + WP projeleri için ortaktır ve hadi Gatsby teması olarak yayınlayalım.
Bir Gatsby teması kullanmaya yönelik proje yapısını yeniden düşünmek. (Büyük önizleme)

Gatsby tema sistemi sayesinde, paylaşılan parçaları bir pakette (veya birden fazla pakette) paketleyebilir, paketleri yayınlayabilir ve son olarak çok sayıda uygulamaya yükleyebilirsiniz. Çoğul form paketlerini kullandığımı unutmayın - bir proje içinde birden çok temayı birleştirebilirsiniz.

Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

Alt Temalar ve Gölgelendirme

Gatsby ve WordPress ile çalışırken, tüm projeler için ortak olan bazı temel işlevleri belirleyeceksiniz. Burada demek istediğim: verileri kaynaklamak ve sayfaları dinamik olarak oluşturmak. Veri kaynağı mantığıyla ve sayfaların oluşturulmasıyla ilgilenen bir temaya sahip olmak faydalı görünüyor. Öte yandan, sayfalarınızı nasıl görüntülemeye karar verdiğiniz bir projeden diğerine değişebilir. Çekirdek düzeyde ne ayarladıysanız, muhtemelen bir noktada geçersiz kılmanız gerekecektir.

Olası yaklaşımlardan biri, bir çekirdek (ana) temaya sahip olmak ve ana temanın üzerine alt temalar oluşturmaktır.

Gatsby çocuk temasıyla ne demek istiyorum?

WordPress alt temalarının bir karşılaştırmasıyla devam edelim. WordPress alt temaları, işlevler eklememize ve şablonları geçersiz kılmamıza olanak tanır. Mevcut bir temayı geliştirmek ve değiştirmek için güvenli bir yol sağlarlar.

Bir Gatsby alt teması, eklentisi olarak bir üst tema kullanır. Daha sonra, alt temaya ana tema dosyalarını geçersiz kılma yeteneği veren gölgeleme kavramını kullanabiliriz; bu, bir alt temadaki WordPress şablonlarını geçersiz kılmaya benzer. Gölgeleme, web paketi paketinde bulunan src dizinindeki dosyaları geçersiz kılabileceğimiz anlamına gelir. Proje düzeyinde (temalarımızı paketler halinde tükettiğimiz) gölgelemenin mümkün olduğunun altını çizmekte fayda var. Bu makalenin ilerleyen bölümlerinde eylemde göreceğiz.

WordPress ile yalnızca bir ana tema, yalnızca bir alt tema ile sınırlıdır ve daha fazla zincirleme mümkün değildir. Gatsby temalarının esnekliği ile çok daha ileri gidebiliriz. Alt-ebeveyn zincirlerinin farklı konfigürasyonlarını oluşturmak mümkündür.

Solda iki tema zinciri wp-theme-child ve wp-theme (ebeveyn) içeren WordPress sitesi ile sağda Gatsby sitesinde birden fazla temadan oluşan daha karmaşık bir sisteme sahip bir çizim.
WordPress ve Gatsby'deki tema yapısı. (Büyük önizleme)

Şimdi Gatsby temasını çalışırken görelim. Örneğimizde, gatsby-theme-wp-parent ve onun alt-teması gatsby-theme-wp-child üzere iki tema oluşturacağız. Bu kurulumu basitlik uğruna seçtim. Gerçek dünya senaryosunda, işlevselliklerinizi her biri belirli sorumluluklara sahip daha fazla temaya ayırmak isteyebilirsiniz.

Temalarımızı yayınlayacağız, bir projeye yükleyeceğiz ve proje düzeyinde gölgeleme yoluyla daha fazla özelleştirme ekleyeceğiz.

Düğüm modüllerinde gatsby-theme-wp-parent ve gatsby-theme-wp-child içeren bir site klasörünün yanı sıra bazı ekstra öğe geçersiz kılmaları (gölgeleme) içeren src ve gatsby-config.js dosyasını temsil eden bir çizim. "Bunları inşa edeceğiz" metninden bir ok, gatsby-theme-wp-parent ve gatsby-theme-wp-child'i işaret ediyor
Nihai proje için basitleştirilmiş dosya yapısı. (Büyük önizleme)

Geliştirme Kurulumu

Son resim, temaların tüketildiği son kullanıcının projesinin ( sitesinin) yapısını göstermektedir. Projenin bağımlılıkları olarak kurulurlar. Bu kurulum, temaların bazı npm depolarında mevcut olduğunu varsayar, bu da onları zaten yayınladığımız anlamına gelir. Henüz orada değiliz. Önce ebeveyn ve çocuk temalarını oluşturmamız gerekiyor. Ancak geliştirme kurulumu neye benziyor? Temalarımız birbirinden bağımsız iki paket ama geliştirme sırasında tek bir proje içerisinde paralel olarak çalışmamız gerekiyor. Ayrıca, aynı proje içinde temaları doğrudan uygulayan bir demo kurmak istiyoruz.

Olası çözümlerden biri iplik çalışma alanlarıdır. İplik çalışma alanları ile proje-kök seviyesinde tek bir kilit dosyası ile tek bir mono-repo içinde çalışıyoruz. Ayrıca, bağımlılıklar birbirine bağlanabilir, bu da çalışma alanlarının birbirine bağlı olduğu ve geliştirme sırasında yerel sürümleri kullandığımız anlamına gelir.

İplik çalışma alanları nasıl kurulur? İlk olarak, ipliğin global olarak takıldığından emin olun. Ardından, monorepo'nuzun köküne, çalışma alanlarını belirten package.json dosyasını ekleyin:

 { "private": true, "workspaces": [ "packages/*", "demo" ] }

Artık her tema, kendi package.json dosyası ve boş bir ana girdi index.js ile packages içinde bir alt klasördür. Eklediğim her temada şöyle ilerliyorum:

 mkdir packages/gatsby-theme-wp-parent touch packages/gatsby-theme-wp-parent/package.json packages/gatsby-theme-wp-parent/index.js

package.json ile aşağıdaki gibi:

 { "name": "@pehaa/gatsby-theme-wp-parent", "version": "1.0.0", "license": "MIT", "main": "index.js" }

Tema yayınlama konusunu biraz daha tartışacağız. Ancak şimdilik temalarımızı kapsamlı paketler halinde yayınlayacağımızı belirtelim; Burada bir kapsam olarak @pehaa takma adımı kullanıyorum. Kapsamlı paketleri https://registry.npmjs.org genel npm kayıt defterinde yayınlamaya karar verirseniz, genel erişimi açıkça belirtmeniz ve aşağıdakileri package.json dosyalarına eklemeniz gerektiğini unutmayın:

 "publishConfig": { "access": "public" }

Temalara ek olarak, kodumuzu deneyeceğimiz bir demo çalışma alanına da ihtiyacımız olacak. Demo, yayınlanmaması gerektiği için "private" bir paket olmalıdır.

 // demo/package.json { "private": true, "name": "demo", "version": "1.0.0", "scripts": { "build": "gatsby build", "develop": "gatsby develop", "clean": "gatsby clean" } }

Çalışma alanları kurulumu ile, betiği ve çalışma alanını aşağıdaki gibi belirterek monorepomuzun herhangi bir yerinden geliştirme veya derleme betikleri çalıştırabiliriz:

 yarn workspace demo develop

Bu arada, tek bir demo ile sınırlı değilsiniz. Örneğin, GatsbyWPThemes monorepo'muz, examples dizinine eklediğimiz birden çok demo içerir. Bu durumda, kök düzeyindeki package.json dosyası, çalışma alanlarını aşağıdaki gibi tanımlar:

 "workspaces": [ "packages/*", "examples/*" ]

Gatsby Temaları Oluşturma

Her şeyden önce, react , react-dom ve gatsby . Bu üçünü her temada eş bağımlılıklar ( -P ) ve demomuzda bağımlılıklar olarak yüklememiz gerekiyor. Ayrıca ana temayı çocuğun tema bağımlılığı olarak ve alt temayı demonun bağımlılığı olarak kurarız.

 yarn workspace @pehaa/gatsby-theme-wp-parent add -P react react-dom gatsby yarn workspace @pehaa/gatsby-theme-wp-child add -P react react-dom gatsby yarn workspace @pehaa/gatsby-theme-wp-child add "@pehaa/gatsby-theme-wp-parent@*" yarn workspace demo add react react-dom gatsby "@pehaa/gatsby-theme-wp-child@*"

Not : Sürüm numarası olmadan @pehaa/gatsby-theme-wp-parent veya @pehaa/gatsby-theme-wp-child . Bunu @* veya @1.0.0 olarak belirtmelisiniz. Onsuz, npm paketi yerel olanı kullanmak yerine depodan almaya çalışacaktır. Daha sonra Lerna ile paketlerimizi yayınladığımızda tüm * ler otomatik olarak güncel tema sürümlerine güncellenecek ve senkronize halde tutulacaktır.

Ana Tema

Şimdi ana temaya ve bağımlılıklarına odaklanalım:

 yarn workspace @pehaa/gatsby-theme-wp-parent add gatsby-source-wordpress gatsby-plugin-image gatsby-plugin-sharp gatsby-transformer-sharp gatsby-awesome-pagination

Ana temamızın sorumluluğu, kaynak eklentiyi ve görüntüleri işlemek ve görüntülemek için gereken üç eklentiyi yüklemektir. Hepsini gatsby-config.js dosyasına yüklüyoruz.

 // gatsby-config.js module.exports = (options) => { return { plugins: [ 'gatsby-plugin-sharp', // must have for gatsby 'gatsby-transformer-sharp', // must have for gatsby images 'gatsby-plugin-image', { resolve: 'gatsby-source-wordpress', options: { url: `${options.wordPressUrl}/graphql`, }, }, ], } }

İçeriği tedarik etmenin yanı sıra, WordPress içeriğimiz için dinamik olarak yollar oluşturmamız gerekiyor. WordPress statik sayfaları, bireysel gönderiler, blog arşivi, kategori arşivi ve etiket arşivi için rotalar oluşturmamız gerekiyor. Gatsby, createPages API'sini Gatsby Node API'nin bir parçası olarak sağlar. Bireysel gönderilerin oluşturulmasından sorumlu koda bir göz atalım.

 exports.createPages = async ({ graphql, actions }) => { const { createPage } = actions const postsQuery = await graphql(` query GET_POSTS { allWpPost(sort: {order: DESC, fields: date}) { edges { node { uri id } } } } `) const posts = postsQuery.data.allWpPost.edges posts.forEach(({ node }) => { createPage({ path: node.uri, component: path.resolve('../src/templates/post-query.js'), context: { // Data passed to context is available in page queries as GraphQL variables // we need to add the post id here // so our blog post template knows which blog post it should display id: node.id }, }) }) }

Kodun tamamını bu GitHub deposunda bulabilirsiniz. Sayfa türüne göre değiştiğini fark edebilirsiniz. Bir gönderi, sayfa veya arşiv için, özellikle ikincisi için uygulanan sayfalandırma ile farklıdır. Yine de, aynı modeli izler:

  • zaman uyumsuz bir graphql "öğeleri al" sorgusu çalıştırın;
  • ortaya çıkan öğeler üzerinde döngü yapın ve her öğe için createPage yardımcı işlevini çalıştırın, aşağıdakileri iletin:
    • yol,
    • component — şablon dosyası; Gatsby, her sayfanın neyi göstermesi gerektiğini bilmelidir,
    • context — şablonun ( component alanında sağlanan) ihtiyaç duyabileceği veri ne olursa olsun.

Ana tema içindeki UI kısmı hakkında endişelenmek istemediğimiz için onu alt temada gölgeleyeceğimiz bileşene devrediyoruz.

 // src/templates/post-query.js import { graphql } from "gatsby" import Post from "../components/Post" export default Post export const pageQuery = graphql` query ($id: String!) { wpPost(id: { eq: $id }) { # query all usefull data } } `

Post bileşeni, şablon dosyasında tanımlanan graphql sayfa sorgusundaki verilere erişime sahiptir. Bileşenimiz, sorgu sonuçlarını props aracılığıyla props.data olarak alır. Bileşen dosyamız şablondan ayrılmıştır ancak verilerine erişimi vardır. Bu kurulumla, sorguyu yeniden yazmak zorunda kalmadan Post bileşenini gölgeleyebiliriz.

 // src/components/Post.js import React from 'react' const Post = (props) => { return <pre>{JSON.stringify(props.data, null, 2)}</pre> } export default Post

Çocuk Tema

Şimdi alt temaya geçelim ve bağımlılıklarını ekleyelim.

Not : Bileşen kitaplığı olarak Chakra UI'yi kullanmayı seçtim, duyguya dayalıdır ve kendi Gatsby eklentisi ile birlikte gelir. Ayrıca @wordpress/block-library WordPress içeriğine özel stiller yüklememiz gerekiyor.

 yarn workspace @pehaa/gatsby-theme-wp-child add @chakra-ui/gatsby-plugin @chakra-ui/react @emotion/react @emotion/styled @wordpress/block-library framer-motion gatsby-plugin-webfonts html-react-parser

Alt temanın sorumluluğu UI kısmıdır ve ana tema tarafından oluşturulan çıplak kemik çıktısını geçersiz kılmamız gerekir. Gölgelemenin çalışması için ana temadan dosya yapısını takip etmemiz gerekir. Örneğin, gatsby-theme-wp-parent/src/components/Post.js Post bileşenini geçersiz kılmak için gatsby-theme-wp-child/src/@pehaa/gatsby-theme-wp-parent/components içinde bir Post.js dosyası oluşturmamız gerekir. gatsby-theme-wp-child/src/@pehaa/gatsby-theme-wp-parent/components . @pehaa ara klasörü, gatsby-theme-wp-parent paketinin kapsamına karşılık gelir.

Solda, gölgeli gatsby-theme-wp-parent'in dosya yapısı, sağda, gölgelemenin gerçekleştiği gatsby-theme-wp-child'in dosya yapısı.
Bileşenlerin gölgelenmesi için dosya yapısı. (Büyük önizleme)

Temalara Seçenekleri Geçme

Gatsby eklentilerini bir gatsby-config.js dosyasına yükler ve yapılandırırız. Kurulumumuzda, her seviyede bir tane olmak üzere, ana temamız, alt temamız ve demo olmak üzere üç yapılandırma dosyamız olacak.

 ├── demo │ └── gatsby-config.js ├── packages │ ├── gatsby-theme-wp-child │ │ └── gatsby-config.js │ └── gatsby-theme-wp-parent │ └── gatsby-config.js └── ...

Demo düzeyinde, yapılandırma alt temayı şu şekilde yükler:

 // demo/gatsby-config.js module.exports = { plugins: [ { resolve: '@pehaa/gatsby-theme-wp-child', options: { wordPressUrl: process.env.GATSBY_WP_URL, /* other options */ }, }, ], }

Yukarıda gördüğünüz gibi alt temaya seçenekleri geçiyoruz. Bunlar, alt tema düzeyindeki yapılandırma dosyasında bulunacaktır. Gatsby eklentileri bir işlev olarak dışa aktarılan yapılandırmaya sahip olduğundan bu mümkündür. Bu nedenle, bazı seçenekler sunan bir eklenti yüklediğimizde, eklenti bunları yapılandırma işlevinin bir argümanı olarak alır. Özellikle, bir temaya ilettiğimiz seçenekler, aşağıdaki gibi üst düzey temasına "iletilebilir":

 // gatsby-theme-wp-child/gatsby-config.js const defaultFonts = ... module.exports = (options) => { // destructure option to extract fonts const {fonts, ...rest} = options return { plugins: [ { resolve: `@pehaa/gatsby-theme-wp-parent`, options: { // "forward" the options gatsby-theme-wp-child options to its parent theme ...rest } }, '@chakra-ui/gatsby-plugin', { resolve: `gatsby-plugin-webfonts`, options: { fonts: fonts || defaultFonts }, }, ], } }

Yukarıdaki koda tekrar bakalım. Yazı tipi yüzlerini alt tema düzeyinde tanımladığımızı, ancak bunları tema seçenekleri aracılığıyla değiştirme olanağını elimizde tuttuğumuzu unutmayın.

 // demo/gatsby-config.js module.exports = { plugins: [ { resolve: `@pehaa/gatsby-theme-wp-child`, options: { wordPressUrl: process.env.GATSBY_WP_URL, fonts: { google: [{family: "Rubik"}], }, }, }, ], }

Temalarımızı yapılandırırken, bir temanın sadece bir paket olduğunu ve son kullanıcının koduna doğrudan erişmediğini unutmamalıyız. Bu nedenle, ileriyi düşünmek ve uygun ayarları ortaya çıkarmak iyi bir fikirdir. Eğer temamız konfigürasyon gerektiren bir eklenti yüklerse, muhtemelen eklenti seçeneklerini proje (demo) seviyesinden tamamen aşağıya aktarmalıyız.

Bir örneğe bakalım. Ana gatsby-source-wordpress eklentisini kullanır. Bu eklenti, schema.requestConcurrency veya schema.timeout gibi bazıları derleme işlemi için kritik öneme sahip bir dizi seçenekle birlikte gelir. Ancak, yine, ana tema yalnızca bir pakettir ve son kullanıcı, gatsby-config dosyasını düzenleyemez. Açık görünebilir, ancak Gatsby WP Temalarının ilk sürümünde bir şekilde gözden kaçırdık. Ancak, hızlı bir düzeltme ile kullanıcı, projenin yapılandırmasından gatsby-plugin-source-wordpress seçeneklerini geçebilir…

 // user's project gatsby-config.js module.exports = { plugins: [ { resolve: `@pehaa/gatsby-theme-wp-child`, options: { wordPressUrl: process.env.GATSBY_WP_URL, gatsbySourceWordPressOptions: {}, // ... }, }, ], }

… alt ve ana tema aracılığıyla hedef eklentiye:

 // packages/gatsby-theme-wp-parent/gatsby-config.js module.exports = (options) => { return { plugins: [ // ... { resolve: `gatsby-plugin-source-wordpress`, options: { url: `${options.wordPressUrl}/graphql`, ...options.gatsbySourceWordPressOptions }, }, ], } }

CSS Teması

Tema oluşturmayı destekleyen CSS-in-JS çözümleri, Gatsby temaları için uygun görünüyor. Gatsby çocuk temamız Chakra UI çerçevesini kullanacak ve CSS temasını biraz özelleştireceğiz. Evet, Çakra UI ayrıca bir “tema” kavramını kullanır. Bu bağlamda tema, tasarım sistemi stili değerlerini, ölçeklerini ve/veya tasarım belirteçlerini depolayan bir JavaScript nesnesidir. Herhangi bir karışıklığı önlemek için buna “CSS teması” diyeceğim. Gerekli @chakra-ui paketlerini Gatsby eklentisi @chakra-ui/gatsby-plugin ile birlikte zaten kurduk. Nasıl çalıştığını öğrenmek için eklentinin kodunu inceleyelim. Aslında Gatsby uygulamamızı ChakraProvider sarar ve src/theme.js dosyasını gölgelendirme için gösterir, böylece şöyle devam edebiliriz:

 /* packages/gatsby-theme-wp-child/src/@chakra-ui/gatsby-plugin/theme.js */ import { extendTheme } from "@chakra-ui/react" const theme = { fonts: { body: "Karma, sans-serif", heading: "Poppins, sans-serif", }, styles: { global: { body: { color: "gray.700", fontSize: "xl", }, }, }, components: { Button: { baseStyle: { borderRadius: "3xl", }, defaultProps: { colorScheme: "red", }, }, }, } export default extendTheme(theme)

Bir kez daha gölgeleme kavramını kullandık. Buradaki kilit nokta, theme.js dosyasını oluşturduğumuz konumdur.

Daha sonra, kullanıcının proje düzeyinde CSS temasının nasıl gölgeleneceğini göreceğiz.

Lerna ile Tema Yayınlama

Temalarınız hazır olduğunda, bunları yayınlamanız gerekir. Kodunuzu herkese açık olarak paylaşmak istiyorsanız, büyük olasılıkla onu genel npm kayıt defterinde yayınlayacaksınız. Ve daha önce hiç paket yayınlamadıysanız, yerel makinenizde Verdaccio ile oynayarak sürece aşina olabilirsiniz.

Gatsby WP Temalarında Cloudsmith'in premium hizmetini kullanıyoruz. Cloudsmith, özel kayıtlar için premium seçenek ve genel kayıtlar için ücretsiz bir çözüm ile npm paketleri için tam özellikli kayıtları destekler. Ücretsiz bir Cloudsmith çözümü ile devam edeceğim. Hesabınızı oluşturduktan sonra yeni bir havuz oluşturun; benimki pehaa/gatsby-wp-theming .

Pehaa/gatsby-wp-theming içeren depoların listesini içeren Cloudsmith uygulama arayüzünün ekran görüntüsü.
Cloudsmith uygulamasındaki depolarım. (Büyük önizleme)

Cloudsmith kayıt defterinizde komut satırınız aracılığıyla değişiklik yapmak için, bu kayıt defteri için oturum açma kimlik bilgilerinizi sağlamanız gerekir. Sadece yaz:

 npm login --registry=https://npm.cloudsmith.io/organistion/repository_name/

ve sizden kullanıcı adınız, şifreniz (API ANAHTARINIZ) ve e-postanız istenecektir.

Çok paketli bir git deposuyla, yayınlamayı kolaylaştırmak için Lerna'yı kullanmak isteyebilirsiniz. Lerna, iplik çalışma alanlarıyla iyi uyum sağlar. Lerna CLI'yi global olarak npm install --global lerna ile kurabilirsiniz. Projemizde başlatmak için aşağıdaki komutu çalıştıracağız:

 lerna init --independent

Yukarıdaki komut, monorepo'nun kökünde bir lerna.json dosyası oluşturacaktır. "useWorkspaces" : true ve "npmClient": "yarn" manuel olarak eklemeniz gerekir; varsayılan public npm değilse, command.publish.registry de belirtmeniz gerekebilir.

 { "npmClient": "yarn", "useWorkspaces": true, "version": "independent", "command": { "publish": { "registry": "https://cloudsmith.io/organisation/repository_name" } } }

Ardından, lerna publish komutu, son sürümden bu yana değişen paketleri yayınlar. Varsayılan olarak Lerna, güncellenmekte olan her paketin sürüm değişikliği için istemleri çalıştırır. Aşağıdakileri çalıştırarak istemleri atlayabilirsiniz:

 lerna publish [major|minor|patch|premajor|preminor|prepatch|prerelease] --yes

Ayrıca Lerna'yı, sürüm çarpmasını belirlemek ve CHANGELOG.md dosyalarını oluşturmak için Geleneksel Taahhüt Belirtimini kullanacak şekilde yapılandırabilirsiniz. Mevcut tüm seçeneklerle, Lerna'yı kullanma şeklinizi iş akışınıza uyarlayabilmelisiniz.

Bir Projede Tema Kullanmak

Şimdi geliştirme sunucusunu durduralım ve kullanıcının bakış açısını ele alalım. gatsby-theme-wp-child child'i npm deposundan yüklenen bir paket olarak uygulayan yeni bir proje olan gatsby-wp-site oluşturacağız. Proje klasörümüze dört bağımlılığımızı yükleyeceğiz: gatsby , react , react-dom ve temanın kendisi. @pehaa kapsamlı paketleri yayınlamak için @pehaa kullandığımızdan, şöyle bir @pehaa kapsamlı depo belirttiğimiz bir .npmrc dosyası eklememiz gerekecek:

 mkdir gatsby-wp-site cd gatsby-wp-site echo "@pehaa:registry=https://npm.cloudsmith.io/pehaa/gatsby-wp-theming/" >> .npmrc yarn init -yp yarn add react react-dom gatsby @pehaa/gatsby-theme-wp-child

Sitemiz neredeyse hazır. Temayı yüklemek ve WordPress URL'sini sağlamak için yalnızca bir gatsby-config.file oluşturmamız gerekiyor. Tamamlandığında, gatsby build çalıştırmaya hazırız.

 // gatsby-config.js module.exports = { plugins: [ { resolve: "@pehaa/gatsby-theme-wp-child", options: { wordPressUrl: "https://yourwordpress.website" } } ] }

Sitemiz hazır.

Bir bilgisayar ekranında yapılan siteden ekran görüntüsü içeren bir illüstrasyon.
Yapımız hazır. (Büyük önizleme)

Peki ya özelleştirme? Yine de gölgelemeden yararlanabiliriz. Ayrıca proje seviyesi gölgeleme açısından her zaman önceliklidir. Altbilgi bileşenini geçersiz kılarak eylemde görelim. Şu anda altbilgimiz @pehaa/gatsby-theme-wp-child/src/components/Footer.js . src klasörünü oluşturmamız ve aşağıdaki dosya yapısını yeniden oluşturmamız gerekiyor:

 gatsby-wp-site ├── src │ └── @pehaa │ └── gatsby-theme-wp-child │ └── components │ └── Footer.js

Yukarıdaki dosya yapısı ile site altbilgisinin yeni bir sürümünü sunmaya hazırız. Örneğin:

 import React from "react" import { useStaticQuery, graphql } from "gatsby" import { Box } from "@chakra-ui/react" const Footer = () => { const data = useStaticQuery(graphql` query { wp { generalSettings { title } } } `) return ( <Box as="footer" p="6" fontSize="sm" bg="gray.700" color="white" mt="auto" textAlign="center" > <b>{data.wp.generalSettings.title}</b> - Built with WordPress and GatsbyJS </Box> ) } export default Footer

Son olarak CSS teması ile nasıl çalışabileceğimize bakalım. Aşağıdaki kodla, src/@chakra-ui/gatsby-plugin/theme.js düzgün bir şekilde yerleştirilmiş, proje içindeki varsayılan temayı genişletebilirsiniz.

 // src/@chakra-ui/gatsby-plugin/theme.js import { extendTheme } from "@chakra-ui/react" const theme = { /* ... */ } export default extendTheme(theme)

Çoğu durumda, bu tam olarak ihtiyacınız olan şey değildir. Yeni CSS teması, gatsby-theme-wp-child yok sayarken, bunun yerine Gatsby alt temasındaki CSS temasını genişletmek istersiniz. İkincisi, extendTheme işlevi birden çok nesneyi iletmenize izin verdiği için mümkündür. Çalışmasını sağlamak için gatsby-theme-wp-child CSS temasını içe aktarmanız ve bunu extensionTheme işlevine ikinci argüman olarak extendTheme gerekir:

 // src/@chakra-ui/gatsby-plugin/theme.js import theme from "@pehaa/gatsby-theme-wp-child/src/@chakra-ui/gatsby-plugin/theme" import { extendTheme } from "@chakra-ui/react" const extendedTheme = { fonts: { body: "Rubik, sans-serif", heading: "Rubik, sans-serif", }, /* ... */ } export default extendTheme(extendedTheme, theme)
Bir bilgisayar ekranında yapılan siteden ekran görüntüsü içeren bir illüstrasyon.
Biraz gölgeleme ekleyelim. (Büyük önizleme)

Siteyi burada canlı olarak görebilirsiniz, bu GitHub deposunun ana dalından konuşlandırılmıştır.

Toplama

Az önce Gatsby temasını çalışırken gördünüz. Tema yaklaşımıyla, kodlarının çoğu tema paketleri içinde tutularak birden çok Gatsby sitesini hızlı bir şekilde kurabilirsiniz. Ayrıca projenin bölümlerini nasıl paketlere ayıracağımızı ve gölgelemeden nasıl yararlanabileceğimizi gördük.

Örneğimizde, temalar arasında bir ebeveyn-alt ilişkisi olan iki tema kurulumunu izledik. Bu her zaman ideal bir seçim olmayabilir.

Bazen, kullanıcı arayüzü özelleştirmesinde oldukça ileri gitmek isteyebilirsiniz. Bu durumda, alt temayı kullanmak yerine doğrudan ana temayı yükleyip gölgelemeyi düşünebilirsiniz. Gerçek dünya senaryosunda, muhtemelen kullanıcı arayüzünün farklı, yeniden kullanılabilir bölümlerinden sorumlu birkaç çocuk düzeyinde temayı seçersiniz (örn. yorumlar, formlar veya arama).

Smashing Magazine Üzerine Daha Fazla Okuma

  • Gatsby İşlevleriyle Bir API Oluşturma
  • Gatsby Sunucusuz İşlevler ve Uluslararası Uzay İstasyonu
  • Gatsby İşlevleri ve Stripe ile Açık Kaynak Yazılımından Para Kazanın
  • Marcy Sutton ile Çarpıcı Podcast 20. Bölüm: Gatsby Nedir?