nuxt3笔记
使用ant-design-vue
(全局)
import Antd from 'ant-design-vue'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(Antd);
})
(局部)
import Button from 'ant-design-vue/lib/button';
import 'ant-design-vue/lib/button/style'
<Button type="primary">Primary Button</Button>
(按需引入)
import Components from 'unplugin-vue-components/vite'
import {
AntDesignVueResolver
} from 'unplugin-vue-components/resolvers'
export default defineNuxtConfig({
devtools: { enabled: true },
vite: {
plugins: [
Components({
resolvers: [
AntDesignVueResolver({
importStyle:'less'
})
]
})
]
},
css: {
preprocessorOptions: {
less: {
modifyVars: {
'primary-color': '#ea6f5a',
},
javascriptEnabled: true,
}
}
},
})
全局引入css
export default defineNuxtConfig({
css: [
'@/assets/css/base.css'
]
})
使用插件全局导入ant-design-vue的message
import { message } from 'ant-design-vue'
export default defineNuxtPlugin(() => {
return {
provide: {
message: message
}
}
})
const { $message } = useNuxtApp()
$message.info('请先登录')
使用插件全局使用ant-design-vue icon
import * as Icons from '@ant-design/icons-vue'
export default defineNuxtPlugin((nuxtApp) => {
const icons = Icons
for(const i in icons) {
nuxtApp.vueApp.component(i, icons[i])
}
})
使用useCookie
const userInfoCookie = useCookie('userInfo', { maxAge: 60 })
userInfoCookie.value = {
uid: 123,
username: 'lq'
}
<template>
<p>获取useCookie的值---------{{ useCookie('userInfo') }}</p>
</template>
使用composables
export default defineNuxtConfig({
imports: [
dirs: [
'composables/*/*.{ts,js,mjs,mts}',
]
]
})
代理转发
export default defineNuxtConfig({
nitro: {
routeRules: {
'/api/**': {
proxy: 'https://api.005.cn/api/**'
}
}
}
})
使用runtimeConfig以及设置环境变量
根目录下创建
.env.local
.env.production
配置文件内容如下
BASE_URL = /api
export default defineNuxtConfig({
runtimeConfig: {
TEST: '这个变量只能是在服务端使用',
public:{
BASE_URL: process.env.BASE_URL
}
}
})
const runtimeConfig = useRuntimeConfig()
const baseURL = runtimeConfig.public.BASE_URL
使用pinia进行持久化
pinia
@pinia/nuxt
@pinia-plugin-persistedstate/nuxt
export default defineNuxtConfig({
modules: [
'@pinia/nuxt',
'@pinia-plugin-persistedstate/nuxt'
]
})
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.$pinia.use(piniaPluginPersistedstate)
})
import { defineStore } from 'pinia'
interface UserInfo {
avatar?: string
name?: string
regist?: string
}
interface UserState {
token: string
userInfo: UserInfo
}
export const userCouter = defineStore('counter',{
state: (): UserState => ({
token: '',
userInfo: {}
}),
actions: {
setToken (token: string) {
this.token = token
},
setUserInfo (userInfo: UserInfo) {
this.userInfo = userInfo
}
},
persist: process.client && {
storage: localStorage,
paths: ['token', 'userInfo']
}
})
import { userCouter } from '@/store/user'
const user = userCouter()
user.setToken('')
user.setUserInfo({})
使用layout模板
<!-- 模板文件 layouts/default.vue -->
<template>
<div class='layout'>
<div class='container'>
<!-- 插槽 -->
<slot name='content'></slot>
</div>
</div>
</template>
<!-- 使用模板 -->
<template>
<NuxtLayout name="default">
<template #content>
这里是内容
</template>
</NuxtLayout>
</template>
使用路由中间件(全局)(类似vue2 vue3的路由守卫)
export default defineNuxtRouteMiddleware((to, from) => {
return navigateTo('')
})
使用路由中间件(局部)
export default defineNuxtRouteMiddleware((to, from) => {
console.log('只对设置了middleware的路由跳转生效')
})
definePageMeta({
middleware: ['only-one']
})
嵌套路由
// 目录(父路由需要在pages下,子路由需要在父路由name文件下)
pages/parent.vue 父路由
<template>
<h2>parent</h2>
<NuxtPage></NuxtPage>
</template>
pages/parent/child.vue 子路由
<h3>child</h3>
// 使用
<NuxtLink to="/parent/child">嵌套路由</NuxtLink><br>
打包部署上线
<!-- 使用generate打包,适合用于博客之类的静态资源 -->
<!-- 使用build打包, 通过用pm2部署运行 -->
直接服务器上拉取代码,然后打包pnpm build
根目录创建pm2.config.cjs(网上是js后缀,但是会报模块错误)
运行pm2 start pm2.config.cjs
// pm2.config.cjs
module.exports = {
apps: [
{
name: 'testdemo',
port: '3005',
exec_mode: 'cluster',
instances: 'max',
script: './.output/server/index.mjs'
}
]
}