Создать коллекцию кузнецов прямо из массива через Javascript

Я создаю статический сайт, используя 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.info('All done!')
  })

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

🤔 А знаете ли вы, что...
JavaScript можно использовать для манипуляции DOM (Document Object Model), что позволяет изменять содержимое и структуру веб-страницы.


1
67
1

Ответ:

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

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

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

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

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