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

想要开发一个网站,并且支持SEO搜索,当然离不开我们的 Nuxt ,那通过本篇文章让我们一起了解一下。让我们一起来构建下 Nuxt3 集成其它插件

目录

安装 Nuxt3,创建项目

一、搭建脚手架

二、添加 Vuetify 3

2.1、安装 Vuetify 3

2.2、创建 Vuetify 插件

2.3、在 nuxt.config.ts 中配置

三、添加 element-plus

3.1、安装 element-plus

3.2、在 nuxt.config.ts 中配置

四、添加常用插件

4.1、安装sass

4.1.1、增加 assets/css/common.scss 

4.1.2、增加 pages/index.vue

4.1.3、修改app.vue

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

4.2、添加 autoprefixer

4.2.1、安装 autoprefixer

4.2.2、在 nuxt.config.ts 中配置

4.3、添加 tailwindcss

4.3.1、安装 tailwindcss

4.3.2、在 nuxt.config.ts 中配置

4.3.3、在根目录创建 tailwind.config.js

 4.3.4、修改 common.scss

4.3.5、测试一下

4.4、添加 pinia 

4.4.1、安装 pinia 

4.4.2、添加 @pinia/nuxt 

4.4.3、添加 pinia-plugin-persist

4.4.4、在 nuxt.config.ts 中配置

4.4.5、新建 store/index.ts 

 4.4.6、新建 store/user.ts 

 4.4.7、测试一下

4.5、添加 nuxt-icons

4.5.1、安装 nuxt-icons

4.5.2、在 nuxt.config.ts 中配置

4.5.3、新建 assets/icons

4.5.4、测试一下

4.6、添加 prettier + eslint

4.6.1 安装 prettier + eslint

4.6.2、新增 .eslintrc.js

4.6.3、新增 .prettierrc.js

4.6.4、新增 .prettierignore

4.6.5、格式化所有文件 

4.6.6、使用路径别名

4.6.7、应用全局样式

五、请求封装

5.1、安装 axios

六、公共方法

6.2 安装 callapp-lib

七、多语言

7.1 安装 vue-i18n

7.2 安装 @nuxtjs/i18n

7.3、在 nuxt.config.ts 中配置

7.4、配置 /i18n/config.ts

7.5、创建国际化文件

7.5.1、en_us.json

7.5.2、zh_cn.json

7.6、测试一下

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

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


安装 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-errorconfig.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);},// 单独更新或写入tokensetToken(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_prefixlocales: ["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',  // 区配不到的语言就用enmessages: {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/aboutconst 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.mzph.cn/web/33704.shtml

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

相关文章

如何将一个web端程序打包成一个pc端程序(exe文件)?

如何将一个Web端程序打包成一个PC端程序&#xff0c;例如一个可执行的EXE文件&#xff0c;是许多开发者常见的需求。下面将详细解释如何使用Nativefier工具将Web端程序打包成PC端程序的具体步骤。 目录 下载并安装Node.js验证Node.js和npm的安装安装Nativefier使用Nativefier打…

革新校园环境:轻空间打造上海六十中学多功能气膜馆

在现代教育环境中&#xff0c;舒适、环保和多功能的建筑越来越受到重视。上海六十中学多功能气膜馆的建设正如火如荼地进行中&#xff0c;这个项目由轻空间&#xff08;江苏&#xff09;膜科技有限公司全力打造&#xff0c;将为学校师生带来全新的活动体验。 项目进展 自项目启…

量子计算的崛起:开启计算新纪元

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

基于SpringBoot小区物业智能卡管理设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

MySQL 外连接、内连接与自连接的区别?

引言&#xff1a;本文将深入探讨这些连接类型的概念、语法及其应用场景&#xff0c;帮助读者全面理解如何利用这些技术实现复杂的数据查询和分析。在数据库查询中&#xff0c;连接操作使得我们可以根据指定的关联条件&#xff08;join condition&#xff09;联合两个或多个表中…

昇思25天学习打卡Day01

实验结果 心得体会 趁着假期&#xff0c;跟谁官方实战营开始系统学习MindSpore深度学习框架。昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。其中易开发表现为API友好&#xff0c;调试难度低&#xff1b;高效执行包括…

C语言常用标准头文件

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

c++分隔字符串

可以使用getline函数。 有两个版本&#xff1a; 至于为什么可以使用getline函数返回值作为while的判断条件&#xff0c;cprimer中表述如下&#xff1a;

【话题】分数限制下,选好专业还是选好学校?

目录 引言&#xff1a;一、专业优先的考量二、学校优先的考量三、个人经历与决策四、综合考虑因素五、建议与策略结论文章推荐 引言&#xff1a; 随着24年高考的落幕&#xff0c;考生们迎来了人生中的重要抉择时刻&#xff1a;选择专业还是选择学校&#xff1f;两者皆重要&…

PS系统教程25

介绍软件 BR&#xff08;bridge&#xff09; PS 配套软件&#xff0c;方便素材整理、管理素材 作用&#xff1a;起到桥梁作用 注意&#xff1a;PS和BR尽量保持版本一致 下载和安装可通过CSDN社区搜索&#xff0c;有免费安装指导。 安装之后&#xff0c;我们打开照片只需双…

vxe-list做列表虚拟滚动时,底部间距的优化

已知vxe-list在数据超出一定行时会自动启用纵向虚拟滚动配置&#xff0c;默认效果如图&#xff1a; 但是在滚动中我们发现有时列表底部间距不一致&#xff0c;而且会出现在感官上底部空白过多的情况&#xff1a; 这时候我们想让列表恰好显示完全应该怎么做呢&#xff0c;查看官…

重生奇迹MU 谁才是真正的全能职业

重生奇迹MU中&#xff0c;游戏的奥妙就在于职业的选择。不同职业间各有千秋&#xff0c;可远可近&#xff0c;全都是玩家们心中的全能职业。本文就将为你分析重生奇迹MU中的各个职业&#xff0c;为你解答谁才是真正的全能职业。 每次新开一个服务器时&#xff0c;玩家们总会纠结…

深入解析账户和会员系统的整体架构设计:从基础到高级实现

在现代应用程序和平台中&#xff0c;账户和会员系统是必不可少的核心组件。它不仅负责用户的注册和登录&#xff0c;还涉及权限管理、用户信息维护、安全性等多个方面。本文将详细解析账户和会员系统的整体架构&#xff0c;从基础概念到高级实现&#xff0c;帮助开发者全面理解…

分享HTML显示2D/3D粒子时钟

效果截图 实现代码 线上体验&#xff1a;three.jscannon.js Web 3D <!DOCTYPE html> <head> <title>three.jscannon.js Web 3D</title><meta charset"utf-8"><meta name"viewport" content"widthdevice-width,ini…

数据处理技术影响皮质-皮质间诱发电位的量化

摘要 皮质-皮质间诱发电位(CCEPs)是探究颅内人体电生理学中有效连接性的常用工具。与所有人体电生理学数据一样&#xff0c;CCEP数据极易受到噪声的影响。为了解决噪声问题&#xff0c;通常会对CCEP数据进行滤波和重参考&#xff0c;但不同的研究会采用不同的处理策略。本研究…

Kotlin 中的数据类型有隐式转换吗?

在 Kotlin 中&#xff0c;数据类型不可隐式转换。在 Java 中&#xff0c;如果数据是从小到大&#xff0c;是可以隐式转换的&#xff0c;数据类型将自动提升。 下面以 int 类型的数据为例&#xff0c;在 Java 中这样写是可以的&#xff1a; int a 2312; long b a;但是在 Kot…

【产品经理】订单处理10-分配快递策略

本次主要讲解下在订单处理过程中分配快递的策略以及分配快递中需要用到的设置。 一、建立快递档案 在ERP系统中&#xff0c;需要建立快递档案&#xff0c;设置所属快递、快递的服务类型、支持的打印模版以及快递在各个平台的电子面单支持情况。 二、仓库绑定快递 仓库需要设…

基于SpringBoot前后端分离在线骑行网站设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

Python学习笔记19:进阶篇(八)常见标准库使用之glob模块和argparse模块

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 这里贴一下教程地址&#xff1a;https://docs.python.org/zh-cn/3/tutorial/stdlib.h…

应变计在工程中的角色:精准监测与安全保障的得力助手

在工程领域中&#xff0c;应变计作为一种重要的测量工具&#xff0c;扮演着精准监测与安全保障的得力助手的角色。它能够实时、准确地测量物体在受力作用下的变形情况&#xff0c;为工程师提供关键的数据支持&#xff0c;从而确保工程的稳定性与安全性。 应变计在工程中的应用范…