Как я могу создать оболочку приложения, используя Gatsby?

#reactjs #gatsby #progressive-web-apps

#reactjs #gatsby #progressive-веб-приложения

Вопрос:

Я был в процессе значительного повышения производительности моего приложения react (созданного с помощью create-react-app). Я размещаю свое приложение в AWS S3 и хотел бы избежать рендеринга на стороне сервера, чтобы я мог использовать беспроблемный мир статического хостинга. Короче говоря, я хотел бы извлечь оболочку приложения (имеется в виду нижний колонтитул, верхний колонтитул и боковую панель в статический контент, последний будет повторно увлажнен и дополнен более подробной информацией после входа пользователя в систему), а также условия обслуживания, регистрацию и информацию о страницах в статический. Тогда приложение было бы полностью динамичным по своей природе (включая основную запись индекса).

Я пытался использовать react-snap, но у него возникли проблемы с отображением service worker, и это не дает мне полного опыта, поскольку это приложение находится за стеной аутентификации (мне пришлось пойти на некоторые компромиссы, например, вручную запросить пользователя для входа в систему, и я бы хотел, чтобы этот процесс был автоматическим).

Я увидел, что Gatsby может соответствовать потребностям, которые я ищу (мое приложение уже разработано в Reach Router). Я не хочу (на данный момент) никаких других функций, только предварительную визуализацию оболочки приложения, о программе, условий предоставления услуг и страниц регистрации.

Как я могу этого добиться?

Я уже загрузил приложение в Gatsby и загрузил главную страницу. Но если я изменю маршрут, я получу 404 (что нормально, поскольку я не определил их внутри страниц). Я проверил документацию и некоторые стартеры, но, похоже, не могу найти свой ответ.

Вот мой единственный файл в /src/pages .

 // src/pages/index.tsx
import React from 'react';
import Root from '../views/Root';

export default () => <Root />;

  

Где <Root /> находится все мое приложение.
(Я знаю, что страница about не будет статичной, поскольку она не была определена внутри /src/pages )

Я попытался добавить это в gatsby-node.js , чтобы я мог отслеживать все маршруты как динамические, кроме страницы about, но это не сработало.

 // gatsby-node.js
// Includes everything but the about page.
const regex = /^((?!(/about)).)*$/;
exports.onCreatePage = async ({ page, actions }) => {
  const { createPage } = actions;
  // Only update the `/app` page.
  if (page.path.match(regex)) {
    // page.matchPath is a special key that's used for matching pages
    // with corresponding routes only on the client.
    page.matchPath = '/*';
    // Update the page.
    createPage(page);
  }
};
  

Как я могу этого добиться?

Ответ №1:

Вы можете использовать плагин gatsby «gatsby-plugin-offline», который не только настроит ваш веб-сайт на автономную работу и кэширование ваших запросов, он также поставляется со встроенной функциональностью оболочки приложения.

https://www.gatsbyjs.com/plugins/gatsby-plugin-offline/?=offline

По ссылке выше:

Оболочка приложения и журналы сервера Журналы сервера (например, из Netlify analytics) могут отображать большое количество просмотров страниц для маршрута, подобного /offline-plugin-app-shell-fallback/index.html это результат того, что gatsby-plugin-offline добавил оболочку приложения на страницу. Оболочка приложения — это минимальный объем пользовательского интерфейса, который можно кэшировать в автономном режиме для надежной загрузки производительности при повторных посещениях. Оболочка может быть загружена из кэша, а содержимое сайта загружено в оболочку работником службы.