【Gatsby.js】我整理了一些「只需掌握这些知识就可以正常使用」的信息

我整理了制作简单静态网站时所需要的知识,不涉及与内容管理系统等的配合。

Gatsby.js是什么

这是一个用于制作网站的React静态网站生成器。

Gatsby.js 的好处 (Gatsby.js de chù)

相对于以往常用的使用HTML/CSS(加上Gulp,Webpack)进行编码的方法,最大的优点是显示速度非常快,速度之快让人惊讶。

其他优点包括

    • JSXを使うので、HTMLの記法等にミスがあったときにすぐに気が付くことができる

 

    • プラグインが豊富(Markdownファイルを読み込む、PWA対応、etc)

 

    • ヘッドレスCMSとの相性が良い

 

    • Gatsby Themeを使って、既存のデザインを流用することができる

カスタマイズが前提ならthemeは使わない方が良さそう

有其他的选择。

安装

假设

    • node.jsがインストールされている

 

    • yarnがインストールされている

なければnpmコマンドで代用可

安装 Gatsby CLI

$ npm install -g gatsby-cli
$ gatsby -v

开始项目

$ gatsby new
✔ What is your project called? … my_project #プロジェクト名
✔ What starter would you like to use? › gatsby-starter-hello-world # 一番シンプルなスターターを選択
$ cd my_project
$ gatsby develop

请访问 http://localhost:8000/,并确认初始显示。

创建头部、底部和布局文件

将在多个页面上共享使用的组件放置在components目录中。

$ mkdir src/components
$ touch src/components/header.js
$ touch src/components/footer.js
$ touch src/components/layout.js
import React from "react"

export default () => (
  <header>
    <h1>サンプルサイトのヘッダー!</h1>
  </header>
)
import React from "react"

export default () => (
  <footer>
    <small>サンプルサイトのフッター!</small>
  </footer>
)
import React from "react"
import Header from "../components/header"
import Footer from "../components/footer"

export default ({ children }) => (
  <> {/* <React.Fragment>の省略形 */}
    <Header />
    {children}
    <Footer />
  </>
)

创建主页

将每一页的文件存放在pages目录中。

import React from "react"
import Layout from "../components/layout"

export default () => (
  <Layout>
    <div>
      <p>トップページのメインコンテンツ!</p>
    </div>
  </Layout>
)

添加链接

使用而不是传统的,可以大幅提升页面转换的速度。

首先,创建前往的页面。

$ touch src/pages/second.js
import React from "react"
import { Link } from "gatsby"
import Layout from "../components/layout"

export default () => (
  <Layout>
    <div>
      <p>2つ目のページのメインコンテンツ!</p>
      <Link to={"/"}>トップページへのリンク</Link>
    </div>
  </Layout>
)

在首页上添加链接

import React from "react"
import { Link } from "gatsby" //追加
import Layout from "../components/layout"

export default () => (
  <Layout>
    <div>
      <p>トップページのメインコンテンツ!</p>
      <Link to={"/second/"}>Secondページへのリンク</Link> {/* 追加 */}
    </div>
  </Layout>
)

优化图像并显示出来

优化图片正是使用Gatsby.js的最大亮点,这一功能可以说是毫不夸张地说。

    • 劣化が目立たない範囲で圧縮

 

    • webp対応のブラウザではjpgやpngの画像もwebpで表示

 

    • デバイスのサイズや解像度に応じて適切なサイズで表示

 

    遅延読み込み

只需很少的配置,即可实现对此类图片进行优化。
本文将重点强调简易性,省略了详细的解释。
如果您想深入了解,请使用”gatsby 图片 static query”关键词进行搜索。

添加图片

$ mkdir src/images

向创建的images目录中添加适当的图像(sample1.jpg)。

添加插件以对图像进行最优化处理。

$ yarn add gatsby-image gatsby-transformer-sharp gatsby-plugin-sharp gatsby-source-filesystem 
module.exports = {
  /* Your site config here */
  plugins: [
    `gatsby-transformer-sharp`,
    `gatsby-plugin-sharp`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/images/`,
      },
    },
  ],
}

创建用于显示图像的组件。

$ touch src/components/image.js
import React from "react"
import { useStaticQuery, graphql } from "gatsby"
import Img from "gatsby-image"

export default props => {
  const { allImageSharp } = useStaticQuery(graphql`
    query {
      allImageSharp {
        nodes {
          fluid(maxWidth: 1600) {
            originalName
            ...GatsbyImageSharpFluid_withWebp
          }
        }
      }
    }
  `)
  return (
    <figure className={props.className} style={props.style}>
      <Img
        fluid={
          allImageSharp.nodes.find(n => n.fluid.originalName === props.filename)
            .fluid
        }
        alt={props.alt}
      />
    </figure>
  )
}

在主页上显示图片

import React from "react"
import { Link } from "gatsby"
import Layout from "../components/layout"
import Image from "../components/image" //追加

export default () => (
  <Layout>
    <div>
      <p>トップページのメインコンテンツ!</p>
      <Link to={"/second/"}>Secondページへのリンク</Link>
      <Image filename="sample.jpg" alt="サンプル画像" /> {/* 追加 */}
    </div>
  </Layout>
)

設定元数据

添加插件

$ yarn add gatsby-plugin-react-helmet react-helmet
module.exports = {
  /* Your site config here */
  plugins: [
    `gatsby-transformer-sharp`,
    `gatsby-plugin-sharp`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/images/`,
      },
    },
    `gatsby-plugin-react-helmet` //追加
  ],
}

创建用于元数据管理的组件。

$ touch src/components/meta.js
import React from "react"
import { Helmet } from "react-helmet"

export default () => (
  <Helmet>
    <html lang="ja" />
    <title>サンプルサイト</title>
    <meta name="description" content="説明文" />
  </Helmet>
)

将其嵌入页面中

//...
import Meta from "../components/meta" //追加

export default () => (
  <Layout>
    <Meta /> {/* 追加 */}
    {/* ... */}
  </Layout>
)

根据每一页进行输出值的更改

如果页面有设置标题,则输出标题为「サンプルサイト」;如果没有设置标题,则输出「サンプルサイト」。

//...

export default props => { // html部分の前に処理が入ると、( から { に変わることに注意
  const baseTitle = "サンプルサイト"
  const title = props.title ? `${props.title} | ${baseTitle}` : baseTitle
  return (
    <Helmet>
      <html lang="ja" />
      <title>{title}</title>
      <meta name="description" content={props.desc} />
    </Helmet>
  )
}
//...
export default () => (
  <Layout>
    <Meta
      title="トップページ"
      desc="Gatsby.jsの使い方を説明するためのサンプルページです。"
    />
    {/* ... */}
  </Layout>
)
import Meta from "../components/meta"
//...
export default () => (
  <Layout>
    <Meta
      title="2つ目のページ"
      desc="2ページ目です"
    />
    {/* ... */}
  </Layout>
)

CSS的选项

在Gatsby.js中,CSS的选择有四个主要选项。

全局CSS

这是将所有样式写入一个CSS(或SCSS)文件的方法。
由于与传统方法几乎相同,因此无需额外的学习成本,这是最大的好处。
对于小型网站来说,这可能是一个选择。

CSS 模块

为每个组件创建一个CSS文件,并从想要应用样式的组件中导入它们,这是一种方法。由于作用域的存在,可以减少类名重复的担忧。

.title {
  color: green;
}
import Styles from "./header.module.css"
.
.
return (
  <h1 className={Styles.title}>サンプルサイト</h1>
)

JS中的CSS

以下是使用CSS in JS库(如styled-components、emotion等)的方法。我还没有使用过它们。每个库的使用方法都不同,但是看起来都相当复杂。

Tailwind CSS => 风尾CSS

這是我個人最推薦的方法。
Tailwind CSS是一個收集了大量實用類別(就像在bootstrap中的mb-4、text-center等)的CSS框架。
它通過在HTML中大量使用類別,儘量避免編寫CSS來達到目的。

只需要一个选项,所以我选择使用以下的方式来翻译成中文:

这种方法

    • クラス名を決める必要がなくなる

 

    • クラス名の衝突がなくなる

BEM、CSS設計からの開放

デザインの修正により不要になったCSSが残ってしまうことがなくなる
どの要素にどんなスタイルが当たっているかがすぐにわかる
カラーコードやフォントサイズ、ブレイクポイント等の統一性を保ちやすい

GitLabでは402のテキスト色、239の背景色、59のフォントサイズが使われています。

ネット上に転がっているサンプルコードを気軽に取り入れやすい

通常この手のサンプルはカスタマイズがしんどいけど、Tailwindならその心配なし

tailwindcomponents.comに公式のサンプルが大量に公開されている

有许多不同的好处。
而且对于媒体查询和重复使用的组件样式,也很巧妙地解决了。

以下是Tailwind CSS开发者Adam Wathan的博客文章的翻译:CSS实用类与“关注点分离”(如何实现优先使用实用类)- yuhei博客。

使用Tailwind CSS

安装TailwindCSS和PostCSS。

$ yarn add gatsby-plugin-postcss # postcssをインストール
module.exports = {
  plugins: [
    //省略
    `gatsby-plugin-postcss`, //追加
  ],
}
$ yarn add tailwindcss --dev # tailwind cssをインストール
$ yarn tailwindcss init # tailwind cssの設定ファイルを生成
$ touch postcss.config.js # postcssの設定ファイルを生成
const tailwind = require('tailwindcss')
 
module.exports = () => ({
  plugins: [tailwind('./tailwind.config.js')],
})
$ mkdir src/utils
$ touch src/utils/global.css
@tailwind base;
@tailwind components;
@tailwind utilities;

将页面上的更改反映出来

import React from "react"
import '../utils/global.css' //追加
//省略
//省略
export default () => (
  <Layout>
    {/* ... */}
    <div>
      <p>トップページのメインコンテンツ!</p>
      <button class="block uppercase mx-auto shadow bg-indigo-800 hover:bg-indigo-700 focus:shadow-outline focus:outline-none text-white text-xs py-3 px-10 rounded">
        Tailwind test
      </button>
      {/* ... */}
  </Layout>
)

清除 CSS

在构建时,检查实际使用的类并将它们的样式单独作为CSS文件的一部分,以减小文件大小的设置。

module.exports = {
  purge: ["./src/**/*.js"], //編集
  theme: {
    extend: {},
  },
  variants: {},
  plugins: [],
}

只需一种选择,请直接用中文表达原文:
在进行这个修正之前和之后打gatsby build命令,您可以确认修正前显示的错误
“Tailwind is not purging unused styles because no template paths have been provided.”
在修正之后已经消失了。

其余

如果您在VSCode上进行开发,可以使用名为Tailwind CSS IntelliSense的扩展工具轻松编码。

部署

将应用程序部署到Netlify或Vercel等平台时

    • 無料で公開できる

 

    • 高速

 

    Githubへのプッシュと連動して自動でビルド→デプロイされる

因此推荐使用。
Netlify的设置在这篇文章中得到了介绍。

请用中文给出以下内容的释义,仅需要一种选项:

参考

    • Webサイト高速化のための 静的サイトジェネレーター活用入門

 

    • 【GatsbyJS】yarnで、Tailwindcssを使用する方法【シンプル構成】

 

    最小手数で始めるTailwind CSS – メドピア開発者ブログ
广告
将在 10 秒后关闭
bannerAds