vue个人博客开发之旅04:nuxt3的初体验

发表于 2023-07-06 | 前端

前言

当初了解到要做SSR,nuxt比较好,但是了解之后发现,兼容的都是vue2。而我做这些就是为了学习,当然要选择vue3。所以,我们之前实现的方案是基于vue3 + vite2的SSR。

准备

根据官网案例,运行命令:npx nuxi init nuxt3-app,nuxt3-app为项目名。因为网络原因,有很大机率失败,没有关系,重试几次就好了! 成功之后,它会提示你cd nuxt3-app和npm run dev or yarn install。

下面,我们一个一个介绍这些功能,当然,不需要的话,是不用创建文件夹的。

assets文件夹

assets文件夹主要用于存储样式和字体文件

components文件夹

components文件夹主要用于存放组件,在这个文件夹里的组件,都会自动注册,自动引入,也就是说,不需要import之类的。

composables文件夹

我不是专业的前端,所以我对于这个概念比较模糊 在我理解,这个是存储公共的状态。

比如,我有一个需求:滚轮滚动到一定程度,所有的页面,都要有响应的变化。 那么我会选择写一个ts到这里,然后去维护,true和false,而不用每个组件都去判断滚轮或者最外层页面传值到组件里。

layouts文件夹

layouts主要存储布局文件,可以使用多个布局。 值得注意的是,layouts和app.vue是冲突的,也就是说,如果使用了布局,可以不用app.vue。 默认布局的命名是:default.vue 但是一定要注意,一定要包含:标签,用于引用路由。

pages文件夹

pages主要存放页面,存放在这里的页面会自动注册为路由。 举例:我在pages里创建index.vue。如果layouts/default.vue里写了,那么访问localhost:3000默认显示的页面就是page/index.vue. 访问localhost:3000/me,那么显示的文件应该是pages/me.vue。

同时,也支持以下特殊规则命名,比如pages/article/[id].vue,需要注意的是,文件名就是[id],带中括号。如果我访问localhost:3000/article/10,那么显示的就是[id].vue。[id].vue里面

const route = useRoute();
console.log(route.params.id);

打印出来的,就是10.

plugins文件夹

plugins文件夹用于存放插件,官方文档有写,是可以支持.server 和 .client命名来区分客户端插件和服务端插件的。

public文件夹

public文件夹用于存放公共文件,我把robots.txt这一类的,都放进了这里。

server文件夹

server文件夹用于存放api,但是目前这个用法还很模糊,我贴一下我的代码。 新建:server/api/blog/list.ts

import { useQuery } from 'h3'
export default async (req, res) => {
    const params = await useQuery(req);
    const data = await $fetch('/blog/aaa/list', {
        baseURL: 'http://api.test.com',
        method: 'GET',
        params: params
    }).then(res => {
        if (!res) {
            return {};
        }
        if (res.code && res.code === 200) {
            return res.data
        } else {
            return {};
        }
    })
    return data
}

那么访问:localhost:3000/api/blog/list,就可以访问的到。 目前还不是很清楚他的使用场景。