Поле relativePath
узла File относится к каталогу, указанному вами в gatsby-source-filesystem
.
Например, скажем, у меня есть структура каталогов, подобная этой:
root
|--gatsby-config.js
`--dirA
|--fileA.md
`--dirB
|--fileB.md
`--dirC
`--fileC.md
И в моем gatsby-config.js
{
resolve: `gatsby-source-filesystem`
options: {
path: `${__dirname}/dirA`, <---- root/dirA
name: `dir`,
},
}
Файлы внутри dirA
будут иметь следующий relativePath
:
File | relativePath
---------------------------------
fileA.md | 'fileA.md'
---------------------------------
fileB.md | 'dirB/fileB.md'
---------------------------------
fileC.md | 'dirB/dirC/fileC.md'
Я могу запросить fileC
следующим образом:
query {
fileName: file(relativePath: {
eq: "dirB/dirC/fileC.md"
}) {
id
}
}
Таким образом, в вашем случае вы можете указать gatsby-source-filesystem
на родительский каталог html.js
, и он должен быть запрашиваемым.
Получить уникальный файл
Если у меня есть следующая структура:
root
|--gatsby-config.js
|--dirD
| `--index.md
`--dirE
`--index.md
И укажите gatsby-source-filesystem
на них обоих, теперь есть 2 файловых узла с одинаковым relativePath
(index.md
).
В этом случае небезопасно выполнять следующий запрос:
query {
fileName: file(relativePath: {
eq: "index.md"
}) {
id
}
}
Поскольку он вернет первый узел File, который удовлетворяет условию фильтра (я не уверен, как Гэтсби решает порядок файлов, есликто-то знает, пожалуйста, поделитесь!).Будет безопаснее добавить несколько дополнительных уникальных фильтров.
Например, когда я устанавливаю gatsby-source-filesystem
, я могу указать свойство name
.Это name
будет храниться в поле sourceInstanceName
на узлах Файла.
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${__dirname}/dirE`,
name: `dirE`,
},
},
Я могу запросить его следующим образом:
{
file(
relativePath: {
eq: "index.md"
},
sourceInstanceName: {
eq: "dirE"
}
) {
id
}
}
Я думаю, что комбинация sourceInstanceName
и relativePath
достаточно для обеспечения уникальности файла.
Кроме того, вы также можете запросить узел File по его absolutePath
.Это гарантирует, что файл уникален, хотя вам все равно нужно указать gatsby-source-filesystem
, где он находится.
В случае, если вы хотите увидеть все файлы с одинаковым relativePath
, этот запрос будет делать:
query {
allFile(filter: {
relativePath: { eq: "index.md" }
}) {
edges {
node {
id
}
}
}
}