前端:Nuxt3 + Vuetify3 + Element Plus + 添加常用插件

news2024/11/19 11:36:18

想要开发一个网站,并且支持SEO搜索,当然离不开我们的 Nuxt ,那通过本篇文章让我们一起了解一下。如果构建一个Nuxt项目

安装 Nuxt3,创建项目

安装nuxt3, 需要node v18.10.0+,大家记得查看自己的node版本。构建脚手架这块我们参考官方文档来就可以了,nuxt快速搭建官方教程 nuxt中文站 || 主要步骤如下:

确保安装了 npx(npx 在 NPM 版本 5.2.0 默认安装了):

一、搭建脚手架

创建的目录必须是空的,不然会构建失败的。 

npx nuxi@latest init <project-name>

如果安装时候遇到异常

npx nuxi init nuxtst:Failed to download template from registry: https://raw.githubusercontent.com

请参考 前端:npx nuxi init nuxtst:Failed to download template from registry: https://raw.githubusercontent.com-CSDN博客

​ 

访问  http://localhost:3000/ 成功即发布成功~~~~

二、添加 Vuetify 3

2.1、安装 Vuetify 3

npm add vuetify@next
npm i -D vuetify vite-plugin-vuetify
npm i @mdi/font

 2.2、创建 Vuetify 插件

我们已经安装了 Vuetify,现在我们需要它来与 Nuxt 对话。我们将通过使用 Nuxt 的插件功能来做到这一点,创建一个 plugins文件夹,然后创建一个名为vuetify.js的文件

vuetify.js 文件中

// plugins/vuetify.js
import { createVuetify } from 'vuetify'
import '@mdi/font/css/materialdesignicons.css'
import 'vuetify/styles'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'

export default defineNuxtPlugin(nuxtApp => {
  const vuetify = createVuetify({
    components,
    directives,
    ssr: true,
  })

  nuxtApp.vueApp.use(vuetify)
})

注意,我们使用的是 nuxtApp.vueApp.use(vuetify) 而不是 app.use(vuetify) 

2.3、在 nuxt.config.ts 中配置

import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify'

export default defineNuxtConfig({
  css: ['vuetify/lib/styles/main.sass'],
  build: {
    transpile: ['vuetify'],
  },
   modules:[
    (_options, nuxt) => {
      nuxt.hooks.hook('vite:extendConfig', (config) => {
        // @ts-expect-error
        config.plugins.push(vuetify({ autoImport: true }))
      })
    },
 ],
  vite: {
    define: {
      'process.env.DEBUG': false,
    },
    vue: {
      template: {
        transformAssetUrls,
      },
    },
  },
  devtools: { enabled: true }
})

三、添加 element-plus

3.1、安装 element-plus

npm i element-plus @element-plus/nuxt

3.2、在 nuxt.config.ts 中配置

 

四、添加常用插件

4.1、安装sass

npm i sass -D
4.1.1、增加 assets/css/common.scss 

在根目录下,依次新建文件夹 assets 、css 以及文件common.scss,并加入样式

4.1.2、增加 pages/index.vue

nuxt 项目是自动生成路由的,无需使用 vue-router,所有的路径都放在 pages 文件夹下面,导入公共scss。

4.1.3、修改app.vue

4.1.4、运行项目,发布成功如下

4.2、添加 autoprefixer

Autoprefixer是一款自动管理浏览器前缀的插件,它可以解析CSS文件并且添加浏览器前缀到CSS内容里,使用CanIUse(caniuse网站)的数据来决定哪些前缀是需要的

4.2.1、安装 autoprefixer
npm install autoprefixer -D
4.2.2、在 nuxt.config.ts 中配置
postcss: {
    plugins:{
      autoprefixer: {}
    }
},

4.3、添加 tailwindcss

windicss 与 tailwindcss 他们两个其实差不多,有部分语法不通,但是 tailwindcss 的社区更加强大,你想用啥都行。

4.3.1、安装 tailwindcss
npm i tailwindcss -D
4.3.2、在 nuxt.config.ts 中配置
 postcss: {
    plugins:{
      autoprefixer: {},
      tailwindcss:{},
    }
 },
4.3.3、在根目录创建 tailwind.config.js

 4.3.4、修改 common.scss
@tailwind base;
@tailwind components;
@tailwind utilities;

.main{
  color: blue;
}
4.3.5、测试一下

修改 pages/index.vue 使用 tailwind 语法设置样式

4.4、添加 pinia 

4.4.1、安装 pinia 
npm i pinia
4.4.2、添加 @pinia/nuxt 
npm i @pinia/nuxt
4.4.3、添加 pinia-plugin-persist

pinia本身不提供持久化存储状态,这里我们使用插件 pinia-plugin-persist 进行持久化存储。

npm i pinia-plugin-persist
4.4.4、在 nuxt.config.ts 中配置
  modules: ['@pinia/nuxt'],
4.4.5、新建 store/index.ts 
import { createPinia} from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist';

// 创建
const pinia = createPinia();
pinia.use(piniaPluginPersist);

// 导出
export default pinia;
 4.4.6、新建 store/user.ts 
import {acceptHMRUpdate, defineStore} from "pinia";

export const useStore =  defineStore("user", {
    state: () => {
        return {
            token: "",
            name: 'old name'
        };
    },
    actions: {
        // 用户登录
        login(data: any) {
            this.setToken(data);
        },
        // 单独更新或写入token
        setToken(data: any) {
            this.token = data;
        }
    },
    persist: {
        enabled: true,
        strategies: [
            {
                key: "USER-INFO",
                storage: process.client ? localStorage : null,
            },
        ],
    },
});

if (import.meta.hot) {
    import.meta.hot.accept(acceptHMRUpdate(useStore, import.meta.hot))
}

 4.4.7、测试一下

4.5、添加 nuxt-icons

4.5.1、安装 nuxt-icons
npm i nuxt-icons
4.5.2、在 nuxt.config.ts 中配置
 modules: ['@pinia/nuxt', 'nuxt-icons'],
4.5.3、新建 assets/icons

注意:icons目录是固定的。

 

4.5.4、测试一下

4.6、添加 prettier + eslint

后面的 typescript 一定要安装,nuxt3 项目初始化后默认没有 typescript 插件

4.6.1 安装 prettier + eslint
npm i @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-prettier eslint-plugin-prettier prettier eslint-plugin-vue typescript -D
4.6.2、新增 .eslintrc.js

4.6.3、新增 .prettierrc.js

4.6.4、新增 .prettierignore
/dist
/node_modules
*.yml
*.yaml
tsconfig.json
*.svg
*.png
*.jpg
*.jpeg
*.scss
*.gif
*.webp
*.ttf
index.html
*.md
4.6.5、格式化所有文件 

重启下编译器即可(因为我使用的是IDEA)

4.6.6、使用路径别名

将路径 ../ 修改为 @

4.6.7、应用全局样式

把 common.scss 配置在 nuxt.config.ts 中,这样所有文件都可以用里面的全局样式了

  css: ['vuetify/lib/styles/main.sass', '@/assets/css/common.scss'],

项目需要用到的基本框架都搭建完成了,本项目集成 Vuetify 所以基本不用写什么样式,上述应用common.scss 主要是让大家知道需要个性化样式的时候如何创建引用。

五、请求封装

5.1、安装 axios

npm i axios

关于 axios常用类 大家可以去网上看下,有很多模版,根据自己实际情况进行封装

六、公共方法

用来记录用户信息或者偏好设置等信息

npm i js-cookie

6.2 安装 callapp-lib

vcallapp 是一个方便通过 vue 指令唤起 APP 的解决方案

npm i callapp-lib

七、多语言

7.1 安装 vue-i18n

npm i vue-i18n

7.2 安装 @nuxtjs/i18n

npm i @nuxtjs/i18n -D

 7.3、在 nuxt.config.ts 中配置

//nuxt.config.ts
export default defineNuxtConfig({
  modules: [
    '@nuxtjs/i18n',
  ],
  i18n: {
    strategy: 'prefix_and_default',  // 添加路由前缀no_prefix
    locales: ["en","zh"],            // 配置语种
    defaultLocale: 'zh',             // 默认语种
    vueI18n: './i18n/config.ts',     // 通过vueI18n配置
  },

})

 7.4、配置 /i18n/config.ts

// i18n/config.ts
import en from "assets/lang/en_us.json";
import zh from "assets/lang/zh_cn.json";
export default defineI18nConfig(() => ({
    legacy: false,  // 是否兼容之前
    fallbackLocale: 'en',  // 区配不到的语言就用en
    messages: {
        en,
        zh
    }
}))

7.5、创建国际化文件

7.5.1、en_us.json
{
  "user": {
    "name": "hello"
  }
}
7.5.2、zh_cn.json
{
  "user": {
    "name": "姓名"
  }
}

7.6、测试一下

7.6.1、按钮直接当前页面变化

7.6.2、将el-select 与i18n进行绑定

达到改变i18n语言的目的并且语言改变时触发方法进行页面跳转

<template>
     ...
     <el-select v-model="locale" placeholder="Select" @change="changeLang">
        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
     </el-select>
     ...
</template>
<script setup lang='ts'>
...
const route = useRoute()
const { locale } = useI18n()

// 语言切换跳转页面
const localeRoute = useLocaleRoute()
const changeLang = async () => {
    // 用于把当前页面生成对应的语言前缀的路由,例如:/zh/,/zh/about
    const routePath = localeRoute({ path: route.fullPath, query: { ...route.query } })
    if (routePath) {
        return navigateTo(routePath.fullPath) 
    }
}
</script>

到这里我们就完成了Nuxt3 + Vuetify3 + Element Plus + 添加常用插件的搭建

如果有什么问题可以联系我,互相交流。.Eamil:dingcho@kingbal.com/QQ:346327002/WX:tinwiy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1855450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[保姆级教程]uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

校园设施物联网信息化改造

随着物联网技术的发展越来越成熟&#xff0c;它不断地与人们的日常生活和工作深入融合&#xff0c;推动着社会的进步。其中物联网系统集成在高校实践课程中可以应用到许多项目&#xff0c;如环境气象检测、花卉种植信息化监管、水质信息化监管、校园设施物联网信息化改造、停车…

内卷时代!程序员如何突破35岁的宿命?

大家好&#xff0c;我是码农先森。 曾经梦想仗剑走天涯&#xff0c;如今却在写字楼里安家。他乡容不下灵魂&#xff0c;家乡容不下肉体&#xff0c;还面临着35岁被毕业&#xff0c;这难道就是程序员的宿命&#xff1f;大环境我们无法改变&#xff0c;但我认为至少能改变自己。…

6.20作业

1.已知网址www.hqyj.com截取出网址的每一个部分(要求&#xff0c;该网址不能存入文件中) echo www.hqyj.com | cut -d "." -f "1,2,3" 2.整理思维导图 3.将配置桥接网络的过程整理成文档&#xff0c;发csdn

H4020 12V24V36V40V1A 同步降压芯片IC Buck-DCDC 低功耗,高效率 100%占空比

H4020是一款12V24V36V40V1A的同步降压&#xff08;Buck&#xff09;DC-DC转换器&#xff0c;专为需要高效率、低功耗和精确电压/电流控制的应用而设计。它内置了高压MOSFET&#xff0c;支持宽范围的输入电压&#xff08;5V-36V&#xff09;&#xff0c;并能提供高达1A的持续输出…

WIN Semis揭幕耐湿砷化镓pHEMT技术

​犹如为无线通信领域注入了一股清新的活力。这项技术不仅支持E频带&#xff0c;更在晶圆级上筑起了一道坚固的防潮屏障&#xff0c;满足了对严苛环境条件的bHAST挑战。今日&#xff0c;WIN半导体公司正式公布了0.1m pHEMT技术PP10-29的测试版&#xff0c;预示着通信领域的新篇…

《web程序设计》课程大作业,XX地旅游景点网站【IDEA下JSP(前后端)+MySQL技术】

背景&#xff1a; 《web程序设计》课程大作业要求 一、课程目标&#xff1a;课程教学目的是让学生能够全面了解和掌握目前国内比较流行的交互式网页制作的理论知识与开发技术&#xff0c;能开发制作出有一定实用性的交互式网站&#xff0c;为将来继续学习和就业打下坚实基础。…

Linux如何远程访问?

远程访问是现代计算机网络中非常重要的一个功能&#xff0c;它允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行操作。对于使用Linux操作系统的用户来说&#xff0c;Linux远程访问是非常常见的需求。本文将介绍如何实现Linux远程访问&#xff0c;并简要介绍一…

写一个坏越的个人天地(二)

小红书上搜了下博客,感觉好像没有让自己喜欢的。昨天刚好学了点grid布局,来试试 菜单栏直接使用el-menu 下边布局就用grid局部了,这块初步想法是轮播+你的天气和我的天气+自我介绍 天气的话,这边要先找一下有没有天气的api 我这边百度搜了个聚合的api,一天可以免费调用5…

云原生容器技术入门:Docker、K8s技术的基本原理和用途

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、容器技术概述 1、什么是容器技术 2、容器技术的历史与发展 3…

统信UOS1070上配置文件管理器默认属性03

原文链接&#xff1a;统信UOS1070上配置文件管理器默认属性03 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS 1070上配置文件管理器默认属性的第三篇文章——配置工作区、侧边栏及高级设置。通过这些配置&#xff0c;您可以更好地组织和管理文件&…

基于matlab的高斯滤波与图像去噪

1 高斯滤波原理 1.1 原理 高斯滤波是一种线性平滑滤波技术&#xff0c;主要用于消除图像中的高斯噪声。它的工作原理可以理解为对整幅图像进行加权平均的过程&#xff0c;即每个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。 高斯滤波实质上是一种信号的滤…

Apache Tomcat 10.1.25 新版本发布 java 应用服务器

Tomcat 是一个小型的轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当在一台机器上配置好 Apache 服务器&#xff0c;可利用它响应对 H…

POLYGON Horror Carnival - Low Poly 3D Art by Synty

465 个独特的预设模型 一个正在运行的摩天轮和旋转木马 包括10个示例脚本,让嘉年华栩栩如生 ◼ 描述◼ 欢迎来到恐怖嘉年华。这个地方曾经有诱人的音乐,现在却有着令人不安的旋律,暗示着其中令人不安的惊喜。 这场险恶的盛会的真正核心在于演示场景。它使用3D低多边形资源构…

C语言常用标准头文件

头文件的基础概念 在C的系列语言程序中&#xff0c;头文件&#xff08;通常扩展名为.h&#xff09;被大量使用&#xff0c;它通常包含函数、变量、结构体等的声明和定义&#xff0c;以及一些宏定义和类型定义。头文件的主要作用是为了方便管理和重用代码&#xff0c;它可以被多…

图纸管理系统的选择:为企业带来的长远价值

图纸管理系统的选择&#xff1a;为企业带来的长远价值 在当今高度信息化和数字化的时代&#xff0c;图纸管理系统的选择对于企业的长远发展至关重要。一个好的图纸管理系统不仅能提升企业的运营效率&#xff0c;还能为企业在激烈的市场竞争中赢得先机。以下我们将详细探讨图纸…

【算法面试】二分查找:如何在有序数组中高效搜索目标值

目录 题目描述 示例 1: 示例 2: 问题分析 解决方法 方法 1&#xff1a;标准二分查找 方法 2&#xff1a;递归二分查找 方法 3&#xff1a;非递归简化版本 方法 4&#xff1a;带调试信息的版本 详细步骤 总结 博主v&#xff1a;XiaoMing_Java 二分查找是一种常见的算…

RabbitMQ实践——使用WebFlux响应式方式实时返回队列中消息

大纲 Pom.xml监听队列实时返回消息测试完整代码工程代码 在之前的案例中&#xff0c;我们在管理后台收发消息都是通过短连接的形式。本文我们将探索对队列中消息的实时读取&#xff0c;并通过流式数据返回给客户端。 webflux是反应式Web框架&#xff0c;客户端可以通过一个长连…

外部网络如何访问内网?

在现代信息化时代&#xff0c;随着企业规模的扩大和业务范围的扩展&#xff0c;越来越多的企业需要实现外部网络访问内网的需求。外部网络访问内网指的是在外部网络环境下&#xff0c;通过互联网等公共网络途径&#xff0c;实现对企业内部网络的访问和操作。这种需求的出现&…

骑马与砍杀战团mod制作-基础-军队笔记(一)

骑马与砍杀战团mod制作-基础-军队装备笔记&#xff08;一&#xff09; 资料来源 学习的资料来源&#xff1a; b站【三啸解说】手把手教你做【骑砍】MOD&#xff0c;基础篇&#xff0c;链接为&#xff1a; https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sourcea507…