Nuxt
Original author(s) | Alexandre Chopin, Sebastien Chopin, Pooya Parsa |
---|---|
Initial release | October 26, 2016; 8 years ago (2016年10月26日)[1] |
Stable release | |
Repository | |
Written in | TypeScript |
Platform | Cross-platform |
Size | 57 KB production |
Type | JavaScript library |
License | MIT License [3] |
Website | nuxt |
Nuxt is a free and open source JavaScript library based on Vue.js, Nitro, and Vite. Nuxt is inspired by Next.js,[4] which is a similar framework based on React rather than Vue.
The main advantage of Nuxt over using Vue alone is its universal rendering system. The framework works as both an in-browser single page application (SPA) as well as a server-rendered static website, by "hydrating" a server-rendered page to a full SPA after it's loaded. This allows websites to have the SEO and performance benefits of a server-rendered site in addition to the interactivity of a client-rendered application.[5] [6] Nuxt largely abstracts the server-rendering features from the developer, and it's therefore able to have a similar development experience to a traditional SPA using Vue's single file component (SFC) system.[7]
In addition to its flagship universal rendering mechanism, Nuxt also provides many other benefits and quality-of-life features, such as path-based routing, hot module replacement (HMR), TypeScript support out of the box, and middleware and server logic.[8]
Features
[edit ]Path-based routing
[edit ]Rather than a regular Vue.js application, which ordinarily requires every route to be manually registered, Nuxt uses path-based routing to automatically register every route in an application.[9]
Pages are declared in the pages/
folder, where the name of the page file becomes the name of the route. Dynamic parameters can be added using square brackets, and catch-all routes can be added using three dots and square brackets, much like JavaScript's array spread syntax.[10]
/pages/about.vue
- Matches /about./pages/user/[id].vue
- Matches all routes directly under /user./pages/posts/[...slug].vue
- Matches all routes under /posts./pages/admin/[[page]].vue
- Matches /admin in addition to all routes directly under it.
Automatic imports
[edit ]
Nuxt automatically imports most Vue composition API functions, and any helper functions from the composables/
and utils/
folders.[11]
<script setup> // ref is automatically imported constcount=ref(0); // useRoute is also automatically imported constroute=useRoute(); </script> <template> <span>{{ count }}</span> </template>
Layouts
[edit ]Nuxt supports SSR-friendly layouts out of the box, which allows similar pages to use the same basic templates, such as a header and footer. Layouts are declared in the layouts/
folder, and work using native Vue slots.
To enable layouts in a Nuxt project, the entry point of the application, app.vue
, must include a NuxtLayout
component to toggle between layouts for each page.[12]
<!-- sample app.vue file content --> <template> <NuxtLayout> <NuxtPage /> </NuxtLayout> </template>
The default layout is located at layouts/default.vue
, and must include a slot for the page content.
<!-- sample layout file content --> <template> <CustomNavbar /> <slot /> <CustomFooter /> </template>
A page can use a custom layout by using the definePageMeta
helper in a setup function or block.[13]
<script setup> definePageMeta({ layout:"custom", }); </script> <template> <!-- this will now fill the slot of the custom layout --> </template>
Middleware
[edit ]Nuxt adds middleware support to applications, which enables server logic to run between navigation changes. Both global and page-specific middleware files are supported.[14]
Middleware is declared in the middleware/
folder, which exports a function that takes in the current and previous routes as parameters. From there, globally-available helpers like abortNavigation
and navigateTo
can be used to control navigation.[15] [16]
exportdefaultdefineNuxtMiddleware((to,from)=>{ // navigation logic if(to.params.id==="0") returnabortNavigation(); returnnavigateTo(`/users/${to.params.id}`); });
Server API
[edit ]
Nuxt can also generate server API routes and handlers, using the server/
folder. Any file placed in server/api
will become an API route, and any file placed in server/routes
will become a route file, the difference being the final file location (server/api
adds an api prefix to the path).[17]
// server/api/hello.ts exportdefaultdefineEventHandler((event)=>{ return{ some:"data here", }; });
This can now be called from components using the useFetch
composable.
<script setup> const{data}=awaituseFetch('/api/hello') </script> <template> <pre>{{ data }}</pre> </template>
See also
[edit ]References
[edit ]- ^ "Nuxt First Public Release". Npm.
- ^ "Release 3.15.4". 29 January 2025. Retrieved 25 February 2025.
- ^ "Nuxt/LICENSE". GitHub. Retrieved 2023年12月19日.
- ^ "Nuxt First Public Release". Npm. Retrieved March 23, 2017.
- ^ Omole, Olayinka (March 18, 2019). "Nuxt: A Universal Vue.js Application Framework". Sitepoint. Retrieved June 18, 2020.
- ^ Berning, Dave (2018年04月16日). "Getting Started with Server-Side Rendering Using Nuxt". Alligator.io. Retrieved 2018年07月02日.
- ^ "Vue.js Development · Nuxt Concepts". Nuxt. Retrieved 2025年02月09日.
- ^ "Introduction · Get Started with Nuxt". Nuxt. Retrieved 2025年02月09日.
- ^ "Routing · Get Started with Nuxt". Nuxt. Retrieved 2025年03月06日.
- ^ "pages/ · Nuxt Directory Structure". Nuxt. Archived from the original on 2023年08月19日. Retrieved 2025年03月06日.
- ^ "Auto-imports · Nuxt Concepts". Nuxt. Retrieved 2025年03月06日.
- ^ "Views · Get Started with Nuxt". Nuxt. Retrieved 2025年03月06日.
- ^ "layouts/ · Nuxt Directory Structure". Nuxt. Retrieved 2025年03月06日.
- ^ "middleware/ · Nuxt Directory Structure". Nuxt. Retrieved 2025年03月06日.
- ^ "abortNavigation · Nuxt Utils". Nuxt. Retrieved 2025年03月06日.
- ^ "navigateTo · Nuxt Utils". Nuxt. Retrieved 2025年03月06日.
- ^ "server/ · Nuxt Directory Structure". Nuxt. Retrieved 2025年03月06日.