Closed26

Gatsby.js + Linaria 導入備忘録

ピン留めされたアイテム
hanetsukihanetsuki

GatsbyにLinariaを導入する方法

必要なパッケージをインストール

yarn add gatsby-plugin-typescript gatsby-plugin-linaria linaria

gatsby-config.jsにpluginを読み込ませる

※ typescriptを利用している場合は、gatsby-plugin-typescriptgatsby-plugin-linariaよりも前に宣言する。
※ 現Gatsbyでは、gatsby-plugin-typescriptを用いなくてもtypescriptが利用できるようになっているが、この対応は必須である。

plugins: [
    `gatsby-plugin-typescript`,
    `gatsby-plugin-linaria`
  ]

.gitignoreに.linaria-cacheを追加する。

.linaria-cache

スタイリング

https://github.com/callstack/linaria/blob/master/docs/API.md

  • Emotionなどと同様にスタイリングすることができる。
  • cxAPIを用いればextendsみたいなこともできる。(*1)
    • classNamesでも同様のことが可能だと思われる。(*2)

*1)

import { css, cx } from 'linaria'

const inner = css`
  margin: auto;
`

export const linaria = cx(css`
  height: 200px;
  width: 400px;
  background: black;
`, inner)

*2)
https://github.com/JedWatson/classnames

hanetsukihanetsuki

GatsbyでLinaria使いたい。

以前までEmotionを利用していたが、Linariaが気になったので乗り換えてみようと思う。

hanetsukihanetsuki

カスタムコンフィグ触ってる道中でやたら、module無いからインストールしてねって言われる。

もしかして色々足りないのでは?

hanetsukihanetsuki
Error: Using the "css" tag in runtime is not supported. Make sure you have set up the Babel plugin correctly.

同様のエラーになりました。悲しい

かこなーるかこなーる

ちなみにですがlinariaをこちらのバージョンでインストールしてみてもだめでしょうか。
現行のものだとTSやBabelの設定などでエラーを吐く場合があるようです。
yarn add linaria@^1.4.0-beta.3
yarn add core-js

hanetsukihanetsuki

ありがとうございます!試してみましたが、エラー変わらずでした。😭

hanetsukihanetsuki

プロジェクトの途中から現在導入しようとしているので原因の切り分けのため、初回から導入を試みる

hanetsukihanetsuki
yarn add gatsby-plugin-linaria linaria

add gatsby-config.js

plugins: [
  'gatsby-plugin-linaria',
]

始めから動作させたらうまくいった...

hanetsukihanetsuki

つまり、既存プロジェクトの方に問題がある。

https://github.com/tsuki-lab/tsuki-lab-web/tree/develop

developで試験中。。

かこなーるかこなーる

既存プロジェクトへ下記を追加

yarn add gatsby-plugin-linaria linaria@beta
yarn add gatsby-plugin-typescript
yarn add babel-preset-gatsby

gatsby-config.jsへ下記追記してください。

plugins: [
  /*
  * gatsby-plugin-typescriptは必ず
  * gatsby-plugin-linariaより上で読み込む
  */
  {
    resolve: `gatsby-plugin-typescript`,
    options: {
      isTSX: true,
      jsxPragma: `jsx`,
      allExtensions: true,
    },
  },
  'gatsby-plugin-linaria',
]

こちらでlinariaが正常に動作するのを確認できました。
TypeScriptをビルドする際のBabelの何かしらの設定が影響してるんでしょうか・・・。
申し訳ないですが詳しいことはわかってません・・・。

hanetsukihanetsuki

導入したところ、正常動作とはいきませんでしたが、エラーが変わりました!
ありがとうございます。

hanetsukihanetsuki

Emorionで通用していた記法の方に問題があるのかなぁ...

hanetsukihanetsuki
yarn add gatsby-plugin-typescript gatsby-plugin-linaria linaria

実施後
gatsby-config.jsに下記を記載

plugins: [
    `gatsby-plugin-typescript`,
    `gatsby-plugin-linaria`
  ]

pages/index.tsxに対して

import { css } from 'linaria'

const linaria = css`
  height: 200px;
  width: 200px;
  background: black;
`

<div className={linaria}></div>

を実施したところ正常に動作を確認。

hanetsukihanetsuki

次は継承系について調査する。

sassでいうところのmixinのinclude

hanetsukihanetsuki
import { css, cx } from 'linaria'

const inner = css`
  margin: auto;
`

export const linaria = cx(css`
  height: 200px;
  width: 400px;
  background: black;
`, inner)

できました。

hanetsukihanetsuki

これである程度やりたいことの条件が揃った。まとめよう

このスクラップは2021/09/04にクローズされました