У меня есть файл json, из которого я загружаю данные для заполнения моей веб-страницы. Например, вот мой membersData.json
[
{
"name": "Person A",
"photoUrl": null
},
{
"name": "Person B",
"photoUrl": "https://drive.google.com/uc?export=view&id=123456789012"
}
]
Я использую резервный URL для нулевых изображений.
и у меня есть страница members.js
export default members = () => {
return <>
{data.map((entry, index) => (
<Grid item xs={12} md={4} lg={3} key={index}>
<MembersCard
name={entry.name}
photoUrl={entry.photoUrl}
/>
</Grid>
))}
</>
}
Где моя членская карта - это компонент карты, возвращающий за вычетом любого макета и стиля.
const MembersCard = (props) => {
return <>
<img src={props.photoUrl} alt= {props.name + " | Image"}/>
<h1>{props.name}</h1>
</>
}
Поскольку все изображения известны мне во время компиляции. Я хотел бы знать, можно ли использовать gatsby-plugin-image вместе с заполнителем traced-svg, чтобы улучшить плохое время загрузки этих изображений, поскольку они долго загружаются с диска Google.
edit: теперь я предварительно выбираю изображения локально перед сборкой и пытаюсь отправить данные в graphql через gatsby-node.js. Я нашел эту статью и построил аналогичную установку.
exports.sourceNodes = ({ actions, createNodeId, createContentDigest }) => {
membersData.forEach( entry => {
const {
name,
photoUrl
} = entry;
let imageName = name.replace(/\s+/g, '-').toLowerCase()
let absolutePath = path.resolve(__dirname, IMAGE_PATH ,`${imageName}.jpg`);
const data = {
imageName,
ext: '.jpg',
absolutePath,
extension: 'jpg'
};
const imageNode = ( photoUrl && photoUrl.startsWith("https://drive.google.com") )? {
...data,
id: createNodeId(`card-image-${name}`),
internal: {
type: 'MembersCardImage',
contentDigest: createContentDigest(data)
}
} : null;
imageNode && actions.createNode(imageNode);
const node = {
name,
image: imageNode,
id: createNodeId(`card-${name}`),
internal: {
type: 'MembersCard',
contentDigest: createContentDigest(entry),
},
}
actions.createNode(node);
})
}
но gatsby-transformer-sharp не работает на моем изображении, и в поле изображения нет childImageSharp. Произошли ли изменения?