Пути перезаписи компилируются с помощью пакета `path-to-regexp` — обратитесь к [его документации](https://github.com/pillarjs/path-to-regexp#parameters) за более сложным синтаксисом.
Пути перезаписи компилируются с помощью пакета `path-to-regexp` — обратитесь к [его документации](https://github.com/pillarjs/path-to-regexp/tree/6.x#parameters) за более сложным синтаксисом.
`rewrites` также может быть функцией, которая получает исходный путь и возвращает новый:
Если вы используете TypeScript, вы можете обернуть загрузчик функцией `defineRoutes` из `vitepress`, чтобы получить подсказки типов для хуков маршрутов, таких как `paths`, `watch` и `transformPageData`:
```ts
// packages/[pkg].paths.ts
import { defineRoutes } from 'vitepress'
export default defineRoutes({
watch: ['../data/**/*.json'],
async paths() {
return [
{ params: { pkg: 'foo' } },
{ params: { pkg: 'bar' } }
]
},
async transformPageData(pageData) {
pageData.title = `${pageData.title} · Packages`
}
})
```
`defineRoutes` является необязательной, но рекомендуется при создании файлов `.paths.ts`.
### Несколько параметров {#multiple-params}
Динамический маршрут может содержать несколько параметров:
@ -310,9 +332,11 @@ import fs from 'fs'
export default {
paths() {
return fs.readdirSync('packages').map((pkg) => {
return { params: { pkg } }
})
return fs
.readdirSync('packages')
.map((pkg) => {
return { params: { pkg }}
})
}
}
```
@ -336,6 +360,46 @@ export default {
}
```
### Отслеживание файлов шаблонов и данных {#watching-template-and-data-files}
При создании содержимого страниц на основе шаблонов или внешних источников данных вы можете использовать опцию `watch` для автоматической пересборки страниц при изменении этих файлов в процессе разработки:
```js
// posts/[slug].paths.js
import fs from 'node:fs'
import { renderTemplate } from './templates/renderer.js'
export default {
// Отслеживание изменений в файлах шаблонов и источниках данных
watch: [
'./templates/**/*.njk', // Файлы шаблонов
'../data/**/*.json' // Файлы данных
],
paths(watchedFiles) {
// watchedFiles будет массивом абсолютных путей найденных файлов
const data = JSON.parse(fs.readFileSync(file, 'utf-8'))
return {
params: { slug: data.slug },
content: renderTemplate(data) // Использование шаблона для генерации контента
}
})
}
}
```
Опция `watch` работает так же, как и в [загрузчиках данных](./data-loading#data-from-local-files):
- Принимает [glob-шаблоны](https://github.com/mrmlnc/fast-glob#pattern-syntax) для сопоставления файлов
- Шаблоны указываются относительно самого файла `.paths.js`
- Изменения в отслеживаемых файлах вызывают перегенерацию страниц и HMR во время разработки
- В продакшен-сборках все страницы генерируются один раз, независимо от конфигурации `watch`
### Доступ к параметрам на странице {#accessing-params-in-page}
Вы можете использовать параметры для передачи дополнительных данных на каждую страницу. Файл маршрута Markdown может получить доступ к параметрам текущей страницы в выражениях Vue через глобальное свойство `$params`: