Разверните сайт gatsby для netlify с --prefix-paths

Я пытаюсь развернуть сайт блога, созданный с помощью Gatsby, на Netlify. Дело в том, что я хочу обслуживать сайт из / blog. Следуя документации, я изменил gatsby-config.js, включив pathPrefix следующим образом:

module.exports = {
  pathPrefix: `/blog`,
  siteMetadata: {...},
  plugins: [...]
}

Затем я изменил свою команду сборки, включив --prefix-paths:

gatsby build --prefix-paths

Когда я запускаю сайт локально, используя gatsby serve --prefix-paths, все работает нормально. Однако после того, как я развернул netlify, сайт по-прежнему обслуживается из root /, а не из / blog. Мой netlify.toml:

[build]
  Command = "npm run build"
  Functions = "lambda"
  Publish = "public"

Команда сборки frum netlify.toml запускает команду из package.json, которая выглядит так:

"build": "run-p build:**",
"build:app": "gatsby build --prefix-paths",
"build:lambda": "netlify-lambda build src/lambda",

Что мне здесь не хватает? Мне нужно сделать какую-то другую конфигурацию для netlify или что-то в этом роде?


person Ovidiu G    schedule 03.06.2019    source источник
comment
Вам нужно установить Base directory в Continuous Deployment меню netlify?   -  person ksav    schedule 03.06.2019
comment
Нет, мне не нужно устанавливать базовый каталог.   -  person Ovidiu G    schedule 04.06.2019
comment
Итак, когда вы загружаете копию своей сборки из netlify, разве файлы не находятся в / blog? На скриншоте из этой статьи показано, как загрузить копию того, что создано: community.netlify.com/t/, и здесь подробно объясняется, как отлаживать то, что происходит во время сборки, более подробно: community.netlify.com/t/common-issue-debugging-site- builds / 142   -  person fool    schedule 04.06.2019
comment
Правильно .. Файлы не находятся в / blog .. Кто-то предложил мне запустить сценарий package.json, чтобы скопировать все, что находится внутри, в папку блога, когда я запускаю команду сборки. Это то, что я сделал с помощью gatsby build --prefix-paths && cd public && mkdir blog && cd public && mv * blog .. Работает локально, но на netlify выдает странную ошибку: 10:31:42 AM: Ошибка: входной файл отсутствует   -  person Ovidiu G    schedule 05.06.2019


Ответы (2)


Допустим, у вас уже работает основной сайт, и вы хотите интегрировать в него свой блог gatsby.

  1. В файл gatsby-config.js блога gatsby добавьте:
module.exports = {
  pathPrefix: `/blog`,
}
  1. Всегда в своем блоге gatsby создавайте netlify.toml файл конфигурации в корне вашего сайта с помощью:
[[redirects]]
  from = "/blog/*"
  to = "/:splat"

Причина этого перенаправления в том, что --prefix-path не меняет место, где gatsby хранит созданные файлы в каталоге сборки. Это создает разницу между ссылками на ваш блог, которые имеют префикс /blog, и путем к вашим файлам. Итак, вы хотите сообщить своему сайту, что каждый URL-адрес с префиксом /blog должен указывать на файлы, которые находятся в вашем каталоге сборки (по пути /).

  1. На своем основном сайте создайте также netlify.toml файл конфигурации с этим правилом перенаправления:
[[redirects]]
  from = "/blog/*"
  to = "https://my-gatsby-blog.netlify.app/:splat"
  status = 200

Это сообщает вашему основному сайту, что он должен перенаправлять на ваш блог gatsby для каждого URL-адреса, начинающегося с /blog/.

person raphadeluca    schedule 22.10.2020

Для всех, кто сталкивается с той же проблемой. Я смог решить эту проблему, скопировав все файлы из общей папки в папку «блог» следующим образом:

"build": "run-p build:**",
"build:app": "npm run clean && gatsby build --prefix-paths && npm run move",
"build:lambda": "netlify-lambda build src/lambda",
"move": "cd public && mkdir blog | mv * blog"

Я добавил команду перемещения в package.json и выполняю ее после сборки. Я не уверен, что я должен это делать, но после некоторого исследования (я также нашел стартап, который этим занимался), я думаю, что это нормально.

Теперь, когда файлы обслуживаются из «/ blog», все работает нормально.

person Ovidiu G    schedule 05.06.2019
comment
Я пробовал то же самое, что и ты, но у меня ничего не вышло. В полученной мной ошибке отсутствует сценарий: clean. Когда я удаляю npm run clean, я получаю следующую ошибку: gatsby not found. Я схожу с ума. Как ты сделал это :) - person hkucuk; 14.06.2019
comment
@hkucuk Похоже, вы не запускали npm install clean или npm install -g gatsby - person user1713450; 11.12.2020