Для того, чтобы это сработало, я думаю, вам придется здесь много делать вручную.
Во-первых, поскольку значения разделены запятой, вы должны сгруппировать изображения вместе:
id,slug,images
v v
615,prime-click-solid-2, "./img-1.png, ./img-2.png"
Затем вы можете использовать createSchemaCustomization
перехват в gatsby-node для ...
- перехватывает поле
images
- извлекает пути из исходного значения,
./img-1.png, ./img-2.png
- создает правильный абсолютный путь для каждого вашего изображения
- запросить эти изображения в базе данных Гэтсби
- вернуть изображения
У меня немного простоя, поэтому я создал небольшой пример.
Структура каталогов:
<root>
|--content
| |
| |--images
| | |--img-1.png
| | `--img-2.png
| |
| `--data.csv
|
`--gatsby-node.js
data.csv content
id,images
hello,"./images/287.jpg, ./images/288.jpg"
Пользовательский крючок Гэтсби
// gatsby-node.js
const path = require('path')
exports.createSchemaCustomization = ({ actions, schema }) => {
const { createTypes } = actions
const types = schema.buildObjectType({
name: 'DataCsv', // Gatsby create name based on your csv file name. Yours will be different — you can find your CSV type name in localhost:8000/___graphql
interfaces: ['Node'],
extensions: {
infer: true,
},
fields: {
images: {
type: '[File]', // important. We're saying DataCsv.images will return an array of File, instead of a string as inferred by default.
resolve: (src, args, context, info) => {
const { fieldName } = info
const paths = src[fieldName]
const imagePaths = paths.split(',').map(str => str.trim())
const absolutePaths = imagePaths.map(imagePath => {
return path.join(__dirname, 'content', imagePath)
})
const fileNodes = context.nodeModel.runQuery({
type: 'File',
query: {
filter: {
absolutePath: {
in: absolutePaths
}
}
}
})
return fileNodes
}
}
}
})
createTypes(types)
}
Затем вы можете запросить изображения:
query Images {
dataCsv {
images {
childImageSharp {
original {
src
}
}
}
}
}
Вы можете увидеть пример и адаптировать его по мере необходимости здесь: https://github.com/d4rekanguok/gatsby-csv-multi-images-example
Ресурсы
Подробнее об этом хуке вы можете узнать в официальных документах , но это немного dry.
Я также написал учебник на топи c здесь .
Надеюсь, что это полезно!