Создать коллекцию металлистов прямо из массива через Javascript - PullRequest
1 голос
/ 06 марта 2019

Я создаю статический сайт, используя JavaScript API Metalsmith и metalsmith-collections.У меня есть собственный скрипт сборки, который собирает массив dogs, который я хотел бы использовать для создания новой коллекции.

const Metalsmith       = require('metalsmith')
const collections      = require('metalsmith-collections')
const layouts          = require('metalsmith-layouts')

var dogs = [
  { name: 'Rover' },
  { name: 'Dog' },
  { name: 'Daisy' }
]

Metalsmith(__dirname)
  .metadata({})
  .source('./src')
  .destination('./build')
  .clean(true)
  .use(layouts())
  .use(collections({
    dogs: {
      // ?
    }
  })
  .build((error) => {
    if (error) throw error
    console.log('All done!')
  })

Нет файлов для dogs;это просто массив, который я создал сам.Как мне указать metalsmith-collections создать коллекцию из массива?

1 Ответ

1 голос
/ 06 марта 2019

Я раньше не использовал metalsmith-collections, но, глядя на документы здесь , похоже, что инструмент используется для сбора коллекций файлов, а не для получения массива данных, как вы пытаетесь это сделатьздесь.

Объект параметров, который вы передаете collections(), должен иметь ключ для каждой коллекции, которую вы хотите (например, dogs), и каждый из этих ключей должен быть объектом с необходимыми параметрами: pattern, который является шаблоном glob для выбора того, какие файлы должны быть помещены в коллекцию (кажется, что это может быть единственная обязательная опция - другие кажутся необязательными), sortBy, которая является строкой, по которой вы можете сортировать эти файлы, которые кажутсячтобы извлечь из их метаданных reverse, который является логическим значением, которое вы можете использовать для реверсирования сортировки, наряду с metadata, limit, refer и некоторыми другими, упомянутыми в этих документах.

Чтобы применить это к вашему варианту использования, я мог бы предложить создать каталог dogs/ в том же месте, что и файл конфигурации, которым вы поделились здесь, а затем поместить, скажем, rover.md, dog.md и daisy.md внутриdogs/ Директогу.Тогда вы должны быть в таблице, чтобы сделать что-то вроде этого:

  // ...
  .use(collections({
    dogs: {
      pattern: 'dogs/*.md'
    }
  }))

Тогда эти файлы Markdown (*.md) в каталоге dogs/ должны присутствовать в вашей коллекции dogs.

...