- Key Concepts
- Directory Structure
- Going further
Adding custom routes
In Nuxt 3, your routing is defined by the structure of your files inside thepages directory. However, since it usesvue-router under the hood, Nuxt offers you several ways to add custom routes in your project.
Using router config
Usingrouter options, you can optionally override or extend your routes using a function that accepts the scanned routes and returns customized routes.
If it returnsnull orundefined, Nuxt will fall back to the default routes (useful to modify input array).
importtype {RouterConfig }from'@nuxt/schema'// https://router.vuejs.org/api/interfaces/routeroptions.htmlexportdefault <RouterConfig>{routes: (_routes)=> [ {name:'home',path:'/',component: ()=>import('~/pages/home.vue').then(r=>r.default||r) } ],}Nuxt will not augment any new routes you return from theroutes function with metadata defined indefinePageMeta of the component you provide. If you want that to happen, you should use thepages:extend hook which iscalled at build-time.
Using thepages:extend hook
You can add, change or remove pages from the scanned routes with thepages:extend nuxt hook. For example, to prevent creating routes for any.ts files:
exportdefaultdefineNuxtConfig({hooks: {'pages:extend' (pages) {// add a routepages.push({name:'profile',path:'/profile',file:'~/extra-pages/profile.vue' })// remove routesfunctionremovePagesMatching (pattern:RegExp,pages:NuxtPage[]= []) {constpagesToRemove= []for (constpageofpages) {if (pattern.test(page.file)) {pagesToRemove.push(page) }else {removePagesMatching(pattern,page.children) } }for (constpageofpagesToRemove) {pages.splice(pages.indexOf(page),1) } }removePagesMatching(/\.ts$/,pages) } }})Using a module
If you plan to add a whole set of pages related with a specific functionality, you might want to use aNuxt module.
TheNuxt kit provides a few waysto add routes:
- extendPages (callback: pages => void)
- extendRouteRules (route: string, rule: NitroRouteConfig, options: ExtendRouteRulesOptions)
Router Options
It is possible to customizevue-router options.
Usingapp/router.options
It is possible to customizevue-router options.
This is the recommended way to specify router options.
importtype {RouterConfig }from'@nuxt/schema'// https://router.vuejs.org/api/interfaces/routeroptions.htmlexportdefault <RouterConfig>{}Usingnuxt.config
Note: Only JSON serializable options are configurable:
linkActiveClasslinkExactActiveClassendsensitivestricthashMode
exportdefaultdefineNuxtConfig({router: {// https://router.vuejs.org/api/interfaces/routeroptions.htmloptions: {} }})Hash Mode (SPA)
You can enable hash history in SPA mode. In this mode, router uses a hash character (#) before the actual URL that is internally passed. When enabled, theURL is never sent to the server andSSR is not supported.
exportdefaultdefineNuxtConfig({ssr:false,router: {options: {hashMode:true } }})Custom History (advanced)
You can optionally override history mode using a function that accepts the base URL and returns the history mode. If it returnsnull orundefined, Nuxt will fallback to the default history.
importtype {RouterConfig }from'@nuxt/schema'import {createMemoryHistory }from'vue-router'// https://router.vuejs.org/api/interfaces/routeroptions.htmlexportdefault <RouterConfig>{history:base=>process.client?createMemoryHistory(base):null/* default */}
Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.