Можно ли использовать вложенные папки в сетке при использовании плагина исходной файловой системы?

Моя желаемая структура папок с содержимым выглядит следующим образом:

- content (directory)
-- home.md

-- trip_A (directory)
--- intro.md
--- day_1.md
--- day_2.md

-- trip_B (directory)
--- intro.md
--- day_1.md

В идеале я хотел бы определить это как единый источник для плагина @gridsome/source-filesystem, чтобы добавляемые в будущем подпапки автоматически заполнялись в источнике.

Однако, похоже, мне, возможно, придется вручную указать отдельный @gridsome/source-filesystem источник для каждой из подпапок? Это правильно или есть какое-то обходное решение?

Например:

  • Как мне создать общий источник для всех сообщений о поездках (независимо от поездки A, B, C или, в будущем, поездки D), который использует typeName (то есть страницу шаблона) типа Trip, но размещает каждую из этих страниц в соответствующем родительском элементе каталоги, например /tripA/day_1.html, /tripB/day_1.html и т. Д.? Конфигурация, кажется, принимает один pathPrefix, если нет способа использовать динамический маршрут с подстановочными знаками?
  • Как использовать разные типы? Здесь, кажется, имеет смысл создать отдельную source-filesystem запись с другим typeName, разве нет другого способа сделать это?

person songololo    schedule 15.11.2020    source источник


Ответы (2)


Я обнаружил, что самое простое решение этой проблемы - вручную назначить путь в части шаблонов конфигурации gridsome с помощью функции

IE, для настройки этого плагина ...

var plugins = [
 {
    use: '@gridsome/source-filesystem',
    options: {
      path: '**/*.md',
      baseDir: 'temp/docs',
      typeName: 'Doc'
    }
  }
];

и эта функция для создания пути ...

function slugify(node) {
  var text = node.title;
  console.log(node);  
  var text = text.toString().toLowerCase()
    .replace(/\s+/g, '-')           // Replace spaces with -
    .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
    .replace(/\-\-+/g, '-')         // Replace multiple - with single -
    .replace(/^-+/, '')             // Trim - from start of text
    .replace(/-+$/, '');            // Trim - from end of text
    return  node.fileInfo.directory + '/' + text;
}

и эта конфигурация Gridsome, которая ссылается на функцию в объекте шаблонов ...

var gridsomeConfig = {
  siteName: siteName,
  icon: {
    favicon: favicon,
    touchicon: favicon
  },
  plugins: plugins,
  templates: {
    Doc:
      (node) => {
        return `/docs/${slugify(node)}/`
      }    
  }
}

и учитывая некоторые файлы уценки в различных подкаталогах, то есть / api и / ui ...

Вы получите контент типа Doc в / docs / ui, / docs / api и т. Д. При необходимости только одного шаблона (тип GraphQL - то есть один и тот же запрос для всех документов).

person James Carter    schedule 13.06.2021

Что вы пробовали в своей конфигурации Gridsome? Примерно следующее должно собрать все файлы в каталоге content и любой из его подпапок:

{
   use: '@gridsome/source-filesystem',
   options: {
      path: './content/**/*.md',
      typeName: 'Post',  
   }
}

Если вы добавите trip_C в будущем, он будет включен в коллекцию автоматически.

В качестве альтернативы вы можете использовать одну звездочку в шаблоне глобуса (path: 'content/*/*.md'), если вы не хотите рекурсивно сканировать подпапки.

Это работает, потому что вы вложили все в content. Также можно указать список шаблонов в поле path, которое может работать, если вы хотите объединить файлы из нескольких каталогов верхнего уровня вместе в единую коллекцию.

Это помогает?

person mrfrogger    schedule 18.11.2020
comment
Я еще не пробовал это, хотя мне интересно, столкнусь ли я с проблемами, когда, если все объединено в один источник, есть ли способ удобно отфильтровать запрос по подпапке? - person songololo; 25.11.2020
comment
Меня беспокоит вопрос: как вы сообщаете source-filesystem о том, что страницы путешествий должны размещаться в разных родительских каталогах, поэтому возникает вопрос, нужно ли создавать отдельную коллекцию для каждой поездки. Я приукрасил исходный вопрос, чтобы добавить его более явно. - person songololo; 05.12.2020