Предоставить Netlify команду serve - PullRequest
2 голосов
/ 14 июля 2020

Я запускаю приложение Gatsby в netlify. Но я не хочу обслуживать его с URL-адреса root (/), а скорее для обслуживания всех страниц и ресурсов из пути, например /blog.

Для этого варианта использования, похоже, идеально подходит be https://www.gatsbyjs.org/docs/path-prefix/

Он отлично работает локально, все обслуживается с /blog, и все мои ссылки: /blog/link1 et c

Это мой пакет . json:

"scripts": {
    "build": "gatsby build --prefix-paths",
    "format": "prettier --write src/**/*.{js,jsx}",
    "start": "gatsby develop  --prefix-paths",
    "serve": "gatsby serve --prefix-paths",
    "now-build": "gatsby build --prefix-paths"
  }

Я добавил этот фрагмент конфигурации в свой gatsby-config. js:

module.exports = {
  pathPrefix: `/blog`,
  ......
}

По умолчанию, если флаг --prefix-paths не передан, это префикс будет просто проигнорирован, а root url (/) будет отправной точкой.

В моем случае локально я делаю это:

gatsby build --prefix-paths && gatsby serve --prefix-paths

И вуаля, я все получаю работает правильно (все обслуживается с /blog).

НО я замечаю странные вещи на netlify:

  1. /blog/link1 больше не работает как локально (страница не отображается) . Если я удалю блог, например /link1, он будет отображаться нормально

  2. Когда я проверяю различные ресурсы 404, например: /blog/page-data/customers/page-data.json, я понимаю, что приложение пытается загрузить ресурсы справа место, но их там нет

Это наводит меня на мысль, что команда сборки выполняется правильно (я также предоставил команду сборки в пользовательском интерфейсе netlify), и я вижу, что она выполняется в журналы сборки тоже.

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

gatsby build --prefix-paths
gatsby serve

Как мне изменить команду serve в netlify в производственной среде?

Обновление:

Я приму решение Франса, приведенное ниже, потому что оно работает. Но просто хотел оставить несколько подсказок людям, которые борются с этим после меня.

По какой-то причине netlify полностью игнорирует команды в пакете. json, вот что я получил:

"scripts": {
    "build": "gatsby build --prefix-paths && npm run move",
    "move": "cd public && mkdir blog | mv * blog",
    "format": "prettier --write src/**/*.{js,jsx}",
    "start": "gatsby develop  --prefix-paths",
    "serve": "gatsby serve --prefix-paths",
    "now-build": "gatsby build  --prefix-paths"
  }

Мне пришлось изменить команду сборки в пользовательском интерфейсе Netlify, как показано на скриншоте Франса ниже. И поместите эту команду туда gatsby build --prefix-paths && npm run move

Не уверен, почему Гэтсби требует, чтобы этот флаг был явно передан, независимо от их причин, мне они не нравятся, потому что это затрудняет развертывание. Для меня было бы больше смысла, если бы конфигурация использовалась там, использование флага помимо конфигурации является излишним (не зная больше контекста, почему они сделали это таким образом).

1 Ответ

0 голосов
/ 14 июля 2020

Вы меняли его в бэк-офисе Netlify?

enter image description here

It works for me to change the deploy command by suffixing --prefix-paths.

With the new update information I'm afraid that your only choice is to move your compiled folder inside /blog using command scripts:

"build": "npm run clean && gatsby build --prefix-paths && npm run move",
"move": "cd public && mkdir blog | mv * blog"

A similar issue is explained https://community.netlify.com/t/deploy-gatsby-site-to-netlify-with-prefix-paths/1267/3 и https://community.netlify.com/t/using-prefix-paths-with-gatsby-on-netlify/1175.

...