Nuxt3稳定版+naive-ui项目开发

nuxt3在2022-11-16发布了稳定版本,网上很多资料的nuxt版本和其他插件或者ui框架的使用都不匹配,踩坑中,欢迎指正,不胜感激,让我们开始把。

nuxt3安装

按照官网,已安装node,vscode情况下
1.终端里cd进你想要的文件夹, 执行npx nuxi init ;(输入项目名称)
2. 再执行code ,就会在vscode里打开项目
3. 执行npm install安装依赖;
4. npm run dev就启动好项目了;

创建目录结构

1.pages放vue文件,列如index.vue,aboutUs.vue等等 app.vue改为NuxtPage,就能看到你index里的内容了

<template><div><NuxtPage /></div>
</template>

2.assets
3.components公共组件
4.composables做数据的共享和一些公共的方法,在vue文件里不用引入,nuxt会自动引入;我这里做了api的管理,在该文件夹下新建index.ts文件,如下

import Http from '@/utils/request'// 首页
export const getIndexInfo = (params: any) => {return Http.get('/xxx/xxx', params) //接口路径
}

在页面使用

<template><div><h1>Welcome to the homepage</h1></div>
</template><script lang="ts" setup>
const info = await getIndexInfo ({})
console.log('info', info)
</script>

5.layouts 布局,增加default.vue,app.vue里用NuxtLayout ,就会给整个网站加上同样的布局了

// default.vue
<template><div><Header/><div class="main"><slot /></div><Footer/></div></template>//app.vue
<template><div class="text-base"><NuxtLayout><NuxtPage /></NuxtLayout></div>
</template><script lang="ts" setup>
</script>

某个页面不需要公共布局,或者想要指定其他布局方式,在页面通过definePageMeta设置

<script setup lang="ts">
// This will work in both `<script setup>` and `<script>`
definePageMeta({layout: false
})
// 或者
definePageMeta({layout: "custom",
});
</script>

6.middleware中间件,可以做 页面的登录校验。在下面新建auth.ts.通过cookie里的信息判断用户是否登录,没有登录则把to的fullpath保存下来,并且跳到登录页面,登录完成后跳转到刚刚保存的fullPath

export default defineNuxtRouteMiddleware((to, from) => {console.log('to', to)const origin_path = useCookie('origin_path', {})const userInfo = useCookie('userInfo')
})

7.pugins插件,需要客户端渲染的插件命名为xxx.client.ts。跟纯vue项目使用插件有点类似,安装插件之后,在plugins建相关插件名的ts文件,import进去,vue是直接挂载到vue实例上,nuxt是通过nuxtApp.vueApp。以vue3-video-play为例:

import vue3videoPlay from "vue3-video-play"; // 引入组件
import "vue3-video-play/dist/style.css"; // 引入cssexport default defineNuxtPlugin((nuxtApp) => {nuxtApp.vueApp.use(vue3videoPlay)
})

8.public 我目前用来放了favicon.icon。在nuxt.config.ts文件下,通过app.head.link配置。
4.utils放了封装的数据请求,新建request.ts。。。。key值要有,不然接口只会返回请求的第一个接口的数据。在用户操作调接口的地方,可以传入时间戳作为key值,比如登录,发送验证码等

import { hash } from 'ohash'export interface ResOptions<T> {data?: Tsuccess?: booleanmessage?: string
}const fetch = (url: string, options?: any): Promise<any> => {const { public: { apiBase } } = useRuntimeConfig()const reqUrl = apiBase + url // 你的接口地址const key = options?.key ? options?.key : hash(JSON.stringify(options) + url)const cookie = useCookie('userInfo')return new Promise(async (resolve, reject) => {useFetch(reqUrl, {...options,lazy: true,headers: {Authorization: 'Bearer' + ' ' + cookie['_rawValue']['token']},key,}).then(({ data, error }) => {console.log('then', data)if (error.value) {reject(error.value)return}const value: any = data.valueif (value['success'] !== true) {//这里根据自己项目后端返回的数据做处理if (value.data?.status === 401) {cookie.value = ''navigateTo('/login')}// 这里处理错误回调// $message.error(value.message)// 或者页面接口请求处catchreject(value)} else {resolve(value['data'])}}).catch((err: any) => {reject(err)})})
}export default new class Http {get(url: string, params?: any): Promise<any> {return fetch(url, { method: 'get', params })}post(url: string, body?: any): Promise<any> {return fetch(url, { method: 'post', body })}put(url: string, body?: any): Promise<any> {return fetch(url, { method: 'put', body })}delete(url: string, body?: any): Promise<any> {return fetch(url, { method: 'delete', body })}
}

5.env环境变量

加了环境变量后,需要在package.json里加入命令行启动的对应的环境

"scripts": {"build": "nuxt build --mode production","dev": "nuxt dev --mode development","generate": "nuxt generate --mode production","preview": "nuxt preview --mode production","postinstall": "nuxt prepare --mode production"},

每个文件下都跟其他博主的差不多,就不一一赘述了. 环境加好了,还需要在nuxt.config.ts里配置

nuxt.config.ts配置

// https://nuxt.com/docs/api/configuration/nuxt-config
import { loadEnv } from 'vite'
interface VITE_ENV_CONFIG {VITE_APP_BASE_API: string,
}
const envScript = process.env.npm_lifecycle_script.split(' ')
const envName = envScript[envScript.length - 1] // 通过启动命令区分环境
const envData = loadEnv(envName, 'env') as unknown as VITE_ENV_CONFIG
console.log('当前环境:', envData)export default defineNuxtConfig({app: {head: {title: 'jjjjj',meta: [{ charset: 'utf-8' },{ name: 'keywords', content: "xxx" },{ name: 'description', content: "xxx" },],script: [{ src: 'http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js' }],}},runtimeConfig: {// The private keys which are only available server-side// apiSecret: '123',// Keys within public are also exposed client-sidepublic: {apiBase: envData.VITE_APP_BASE_API //把当前的环境变量设置到apiBase,这里和rc版本有点不一样}},build: {transpile:process.env.NODE_ENV === 'production'? ['naive-ui','vueuc','@css-render/vue3-ssr','@juggle/resize-observer']: ['@juggle/resize-observer']},vite: {envDir: '~/env', // 指定env文件夹optimizeDeps: {include:process.env.NODE_ENV === 'development'? ['naive-ui', 'vueuc', 'date-fns-tz/esm/formatInTimeZone']: []}}
})

naive-ui安装

看到这个ui框架觉得很是喜欢,有我想要的效果。安装按照官方的说明,安装,配置即可。在plugins下加入插件的时候有ts报错,最后修改如下(第一次接触ts,欢迎指正)

import { setup } from '@css-render/vue3-ssr'export default defineNuxtPlugin((nuxtApp) => {if (process.server) {const { collect } = setup(nuxtApp.vueApp)const originalRenderMeta = nuxtApp.ssrContext?.renderMetanuxtApp.ssrContext = nuxtApp.ssrContext // 这两行不一样,我没有把空对象赋值上去if (nuxtApp.ssrContext) { // 加了一个nuxtApp.ssrContext有值的判断nuxtApp.ssrContext.renderMeta = () => {if (!originalRenderMeta) {return {headTags: collect()}}const originalMeta = originalRenderMeta()if ('then' in originalMeta) {return originalMeta.then((resolvedOriginalMeta) => {return {...resolvedOriginalMeta,headTags: resolvedOriginalMeta['headTags'] + collect()}})} else {return {...originalMeta,headTags: originalMeta['headTags'] + collect()}}}}}
})

naive-ui的使用

像message组件,dialog等组件,要在app.vue用相应的provider组件包裹起来

<template><NMessageProvider><NDialogProvider><div><NuxtPage /></div></NDialogProvider></NMessageProvider>
</template><script lang="ts" setup>
import {NMessageProvider,NDialogProvider
} from 'naive-ui'
</script>

在pages下使用

<template><div><h1>Welcome to the homepage</h1><NButton @click="cb1">useMessage</NButton><NButton @click="cb2">useDialog</NButton><NNumberAnimation ref="numberAnimationInstRef" :from="0" :to="12039" /></div>
</template><script lang="ts" setup>
import {useMessage,useDialog
} from 'naive-ui'
const message = useMessage()
const dialog = useDialog()
const cb1 = () => {message.info('message')
}
const cb2 = () => {dialog.info({title: 'dialog',content: '消息消息',positiveText: '确定',onPositiveClick: () => {message.success('我就知道')}})
}
</script>

都看到这里了,点个赞把【笔芯】!一直在踩坑中,如有错误,感谢您指正,或者您可以给一些建议。
快要新的一年了,希望大家都身体健康,早日升职加薪!!!!

Nuxt3稳定版+naive-ui项目开发相关推荐

  1. 实验管理系统springboot+vue+element ui项目开发

    实验管理系统 某学院实验老师长期采用人工的形式完成药品试剂的入库.查询.出库的流程.但这种方式存在诸多问题和不便: 1. 在仓库运行流程中效率不高,容易出错. 2. 管理人员不能方便的了解每种物品的状 ...

  2. miui11稳定版获取完整root_MIUI11系统怎么样刷入开发版获得Root超级权限

    小米的手机或平板不同手机型号一般情况下官网都提供两个不同的安卓系统版本,可分为稳定版和开发版,稳定版没有提供root权限管理,开发版中就开启了root权限,很多时候我们需要使用的一些功能强大的App, ...

  3. MIUI开发版和稳定版有什么区别

    由于开发者多,新的系统还不是很健全,但是加了功能进去,这个就是开发版,稳定版就是功能测试基本无bug的版本,看看下面具体讲的吧. 与其他手机系统 固件不同,小米手机的系统固件会采用每周升级的方式推出新 ...

  4. 荣耀与美团合作推出 “共享笔记本”;传腾讯建议推出美国版微信,已被否;Debian 10.6 稳定版发布|极客头条

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 欢迎 ...

  5. miui10.0.4 android p,小米10稳定版刷机包(系统刷机官方最新固件升级包MIUIV12.0.4.0)...

    小米10搭载高通骁龙865处理器,后置1亿像素AI四摄,搭载4780mAh电池,支持30W有线快充,搭载MIUI 11系统,最近已经可以更新升级MIUI12了,小编第一时间和大家分享,可通过本页面下载 ...

  6. 告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目(实际项目开发的浓缩精华版)

    告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目 一.前言 二.如何选择版本 2.1 SpringCloud 和 Spring Boot 版本选型 2.1. ...

  7. 计算机科学常见工具书清单、项目开发清单

    0. 开源精神与开源社区 <大教堂与集市>(The Cathedral & the Bazaar: Musings on Linux and Open Source by an A ...

  8. Nuxt3 + Naive UI 的SSG项目分享(一)

    搭建Nuxt3项目分享 你好! 这是写在分享前的前言,主要是想谈谈分享的初心,它涉及两个方面:一是整理并且巩固自己的技术应用的知识,用于查漏补缺之用:二则是秉承互联网精神,在网络上相互分享,相互协作. ...

  9. 基于微信小程序云开发(校园许愿墙app)2.0稳定版,以发布上线

    大家好~我是c站的一个小博主,我会定期更新博文,本篇是围绕微信小程序基于腾讯云开发展开的一个项目,如果看着还不错,或者对您有帮助的话,可以进我的专栏看看我的小程序的其他作品https://blog.c ...

最新文章

  1. C语言,二维数组的逗号!_只愿与一人十指紧扣_新浪博客
  2. python——杂货铺
  3. EF 4.1中内部经常提交的 exec sp_reset_connection 的用途原来是为了重用池中的连接...
  4. 作用域、执行环境、作用域链
  5. 解决2次查询User的问题(ThreadLocal)
  6. 设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
  7. gambas 编译_使用Gambas进行BASIC编程,适合初学者
  8. 【Java数据结构与算法】第八章 快速排序、归并排序和基数排序
  9. poj3187【dfs】
  10. (三)洞悉linux下的Netfilteriptables:内核中的rule,match和target
  11. php phdfs扩展,hadoop HDFS的PHP扩展—PHDFS
  12. 国三 unit3 被动语态
  13. android 小说下载器 源码 分享
  14. (五)AR Foundation实现图片检测(下)
  15. python展开阅读全文_展开阅读全文 js 爬虫操作
  16. 引力模型-高维固定效应面板泊松模型
  17. 【升级华为网络设备及失败修复】
  18. JSP大学实用教程(第2版)代码一
  19. 深入浅出Spring Aop
  20. MDA(模型驱动架构)

热门文章

  1. 221. 最大正方形
  2. linux shell awk 语法
  3. 【PyTorch系例】torch.Tensor详解和常用操作
  4. Vivado综合设置之-keep_equivalent_registers
  5. 支持手机,滑动拖动验证
  6. 我与我的专业计算机网络作文,我与网络的故事作文600字
  7. 中科创达发布融合智能泊车技术于解决方案
  8. Python与OpenCV(三)——基于光流法的运动目标检测程序分析
  9. 微型计算机2017年2月,2017年1-2月份规模以上工业增加值增长6.3%
  10. 贝叶斯统计 韦来生 课后题答案 第四章