Не обошлось без препятствий

Итак, я переехал в этот коттедж в Нью-Йорке рядом с таинственным особняком. Я купил его по хорошей цене, но чувствовал, что кто-то наблюдает за мной из особняка. Кажется, это был мистер Гэтсби. Кхм..

Извините, это другая история. Давай начнем сначала.

На этой неделе я начал свой первый проект в стиле Гэтсби. Gatsby — это фреймворк на основе React для создания статически сгенерированных веб-сайтов и приложений. Его экосистема содержит плагины, темы и так называемые рецепты, которые автоматизируют определенные задачи. Официальный сайт говорит:

Создайте полноценный веб-сайт за то время, которое обычно уходит на создание прототипа

Я был очень взволнован, чтобы попробовать и посмотреть, правда ли вышесказанное. У меня было хорошее первое впечатление, но я столкнулся с некоторыми препятствиями. Однако не все были связаны с Гэтсби. Посмотрим, как это было.

Первоначальная настройка была довольно простой. Вы можете запустить следующие команды, чтобы запустить проект:

npm install -g gatsby-cli
gatsby new projectname
cd projectname
gatsby develop

Что дальше? Мы могли бы создать некоторые компоненты React и отобразить, например, заголовок. Но есть ли какая-то структура, которой я должен следовать? Давайте спросим мистера Гэтсби.js. Оказывается, у нас есть папки /page и /templates внутри /src. Там тоже много конфигурационных файлов!

|-- /.cache
|-- /plugins
|-- /public
|-- /src
    |-- /pages
    |-- /templates
    |-- html.js
|-- /static
|-- gatsby-config.js
|-- gatsby-node.js
|-- gatsby-ssr.js
|-- gatsby-browser.js

Мне не нужно создавать много страниц, потому что мой проект одностраничен :-) Поэтому я оставлю там только файл index.js. А остальные папки?

  • Папка /plugins содержит все подключаемые модули для конкретных проектов («локальные»), которые не опубликованы в виде npm пакета.
  • Папка /public создается автоматически, когда мы запускаем gatsby build
  • /static — сюда можно поместить любой файл, который вы не хотите обрабатывать с помощью веб-пакета. Они будут скопированы в общую папку нетронутыми.

Статическая папка интересна, потому что я полагаю, что могу поместить туда активы, например, изображения. Возможно, вы захотите минимизировать свои изображения, чтобы оказалось, что статическая папка полезна только для нескольких менее распространенных сценариев.

Хорошо, а куда мне тогда поместить активы? Я создал папку /images внутри /src. Я сделал то же самое для компонентов. Давайте теперь посмотрим на плагины.

Плагины и стили

Плагины — это пакеты npm, которые вы можете установить с помощью командной строки, как вы уже привыкли, если работали над любым проектом внешнего интерфейса. Вы можете найти плагин для отзывчивых изображений, SEO, поддержки машинописи и тысячи других.

Думал, как сделать стайлинг. Есть также много вариантов на выбор:

  • Используя глобальные CSS-файлы с или без вы… Эм, я имею в виду компонент Layout
  • Использование стилизованных компонентов
  • Использование модулей CSS

Я еще не очень хорошо знаком с подходами CSS в JS, но я знал, что хочу использовать Sass. В любом случае мне нужно стилизовать только одну страницу, поэтому мне не нужно ничего необычного. Оказывается, есть еще плагин для использования Sass в Gatsby под названием gatsby-plugin-sass.

Я установил плагин с помощью следующей команды (обратите внимание также на node-sass)

npm install node-sass gatsby-plugin-sass

Затем нам нужно отредактировать файл gatsby-config.js и добавить:

plugins: [`gatsby-plugin-sass`]

Вот тут и появилась первая проблема. Пытаясь запустить свой проект, я читаю в консоли:

Node Sass версии 5.0.0 несовместим с ^4.0.0.

После некоторых других предложений я узнал, что LibSass и Node Sass устарели. Какие? Кто помнит реализацию на Ruby? Слова из песни Мадонны Hang up Время идет так медленно определенно не оправдали себя, когда дело касается веб-разработки. Тем не менее, есть новая реализация Dart, так что я попробовал.

npm install --save-dev sass

и в gatsby-config.js

plugins: [
  {
    resolve: `gatsby-plugin-sass`,
    options: {
      implementation: require("sass"),
    },
  },
]

Отлично, это прекрасно работает, и я могу стилизовать компоненты, просто импортировав их в index.js:

import '../styles/styles.scss'

Они могли бы обновить плагин и установить реализацию Dart по умолчанию.

Типография

Для всего должен быть плагин, поэтому я искал «шрифты» в репозитории Gatsby. Первым результатом был gatsby-plugin-webfonts, поэтому я установил его.

// with npm
npm install gatsby-plugin-webfonts
// with yarn
yarn add gatsby-plugin-webfonts

О, еще одна ошибка:

ошибка gatsby-plugin-webfonts вызвала ошибку при выполнении жизненного цикла onPreBootstrap:

Я не уверен, что случилось. Этот пакет был загружен 34,8 тыс. раз.

Совет. Придерживайтесь одной системы управления пакетами. Используйте либо npm, либо пряжу

Я сделал еще один поиск и на этот раз выбрал gatsby-plugin-web-font-loader (106.1k), который работал просто отлично.

Как закомментировать JSX

Последнее, с чем у меня возникли трудности, это JSX. Я как всегда закомментировал код ярлыком, но выглядело это так:

// <div>
//     <span>some text</span>
// </div>

Это неправильный синтаксис, поэтому мне пришлось исследовать снова. Я просмотрел свои расширения и выяснил, в чем заключается проблема. Мне пришлось сделать следующее:

Удалите плагин Babel ES6/ES7 от dzannotti

Установите Babel JavaScript Майкла МакДермотта

Правильный синтаксис выглядит так:

{/*
   <div> 
     <span>some text</span> 
   </div>
*/}

Вывод

Есть много вещей, которые я не рассмотрел и должен изучить, но пока мне нравится Гэтсби. Он развивается очень быстро, и я также в восторге от рецептов (новая функция). Как они выразились в недавнем пресс-релизе

Когда пользователи входят в экосистему Gatsby, им приходится переводить фразу «Я хочу сделать x» в то, как это делается в Gatsby

Верно, я тоже так делал. Рецепты запускаются из CLI и автоматизируют общие задачи, такие как создание страниц и макетов, установка плагинов и многое другое. Я прихожу в мир React с некоторым опытом работы с Angular (который использует Angular CLI), поэтому я могу только ценить этот шаг к улучшению инструментов и предоставлению разработчикам более самостоятельных способов создания невероятно быстрых веб-приложений. Я также обнаружил, что IntelliSense (завершение кода) отстает от Angular, но это может быть связано с дизайном или недостатком знаний/настройкой расширения, поэтому я был бы признателен за ваше мнение по этому поводу.

Вы пробовали Гэтсби? Какие ваши любимые плагины?

Бонус — ярлыки VS Code:

перевод текста в нижний регистр => CTRL + K и CTRL + L
перевод текста в верхний регистр => CTRL + K и CTRL + U