Как исправить проблемы с внутренними ссылками при публикации сайта Docusaurus на страницах GitLab

В моем проекте Docusaurus мои внутренние ссылки работают в моей локальной среде, но когда я отправляю в GitLab, они перестают работать. Вместо того, чтобы заменять исходный заголовок документа новым, он добавляет его к URL-адресу в конце («https://username.io/test-site/docs/overview/add-a-category.html»). Я просмотрел свой файл конфигурации, но я не понимаю, почему это происходит.

Я попытался обновить идентификатор в начале страницы и убедиться, что он соответствует идентификатору в файле sidebars.json. Я также добавил customDocsPath и установил для него значение «docs/» в файле конфигурации, хотя предполагается, что это значение по умолчанию.

---
id: "process-designer-overview"
title: "Process Designer Overview"
sidebar_label: "Overview"
---
# Process Designer

The Process Designer is a collaborative business process modeling and 
design workspace for the business processes, scenarios, roles and tasks 
that make up governed data processes.

Use the Process Designer to:

 - [Add a Category](add-a-category.html)
 - [Add a Process or Scenario](Add%20a%20Process%20or%20Scenario.html)
 - [Edit a Process or Scenario](Edit%20a%20Process%20or%20Scenario.html)

Я обновил добавление ссылки на категорию в скобках для расширения md, но это сломало ссылку на моем локальном компьютере, и она по-прежнему не работала в GitLab. Я ожидаю, что когда пользователь нажмет на ссылку, он заменит заголовок документа в URL-адресе новым названием документа («https://username.gitlab.io/docs/add-a-category.html»), но вместо этого он просто прикрепит его к концу («https://username.gitlab.io/docs/process-designer-overview/add-a-category.html»), и поэтому ссылка сломан, так как это не то место, где находится документ.


1
581
1

Ответ:

Решено

Было несколько проблем с моими ссылками. Во-первых, я конвертировал эти файлы из html в markdown с помощью Pandoc и не добавлял вступительную часть, вместо этого полагаясь на имя файла для подключения моих файлов к боковым панелям. Это было нормально, за исключением того, что почти во всех именах файлов были пробелы, что вы можете видеть в моем примере кода выше. Это вызывало настоящие проблемы, поэтому я нашел сценарий Bash, который заменял все пробелы в именах моих файлов символами подчеркивания, но теперь все мои ссылки не работали. Я обновил все ссылки в своих файлах с помощью поиска и замены в редакторе кода, заменив «% 20» на «_». Мне также нужно было заменить расширение «.html» на «.md», иначе мой проект больше не работал бы локально. Опять же, я сделал это с помощью поиска и замены в моем редакторе кода.

Наконец, я закончил тем, что добавил переднюю часть, потому что в противном случае все заголовки моих боковых панелей были покрыты символами подчеркивания. Поскольку я работал с 90 файлами, мне не хотелось делать это вручную. Я поискал какое-то время и нашел отличный смысл от thebearJew и настроил его так, чтобы он брал имя файла и добавлял его как id, а первый заголовок и добавлял его как title и sidebar_label, так как это работает для нашего проекта. Вот скрипт Bash, который я нашел в Интернете, чтобы преобразовать пробелы в именах моих файлов в символы подчеркивания, если интересно:

find $1 -name "* *.md" -type f -print0 | \
  while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done

Вот сценарий, который у меня получился, если у кого-то еще есть аналогичная настройка и он не хочет обновлять огромное количество файлов с вступительной частью:

# Given a file path as an argument
# 1. get the file name
# 2. prepend template string to the top of the source file
# 3. resave original source file

# command: find . -name "*.md" -print0 | xargs -0 -I file ./prepend.sh file

filepath = "$1"
file_name=$("basename" -a "$filepath")

# Getting the file name (title)
md='.md'
title=${file_name%$md}
heading=$(grep -r "^# \b" ~/Documents/docs/$title.md)
heading1=${heading#*\#}

# Prepend front-matter to files
TEMPLATE = "---
id: $title
title: $heading1
sidebar_label: $heading1
---
"
echo "$TEMPLATE" | cat - "$filepath" > temp && mv temp "$filepath"