Nuxt3项目准备
1. 安装Nuxt
nuxt中文网: https://www.nuxt.com.cn/
npx nuxi@latest init demo
# Which package manager would you like to use?
# ● npm
# ○ pnpm
# ○ yarn
# ○ bun
# ❯ Initialize git repository?
# ○ Yes / ● No
2. 安装依赖项
cd demo
npm install
3.启动项目
npm run dev
自定义启动端口
1. 增加 ip + 自定义端口 访问
// 修改文件 nuxt.config.ts 增加如下配置
devServer: {
host: "0.0.0.0",
port: 9501,
}
// 改动后为
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
devtools: { enabled: true },
devServer: {
host: "0.0.0.0",
port: 9501,
}
})
多环境编译
1. 增加环境变量
// 修改文件 nuxt.config.ts 增加如下配置
vite: {
// 增加自定义属性
define: {
'process.env.MODE': JSON.stringify(process.env.MODE || 'dev')
}
}
// 改动后为
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
devtools: { enabled: true },
devServer: {
host: "0.0.0.0",
port: 9501,
},
vite: {
// 增加自定义属性
define: {
'process.env.MODE': JSON.stringify(process.env.MODE || 'dev')
}
}
})
2. 增加启动命令
# 修改文件 package.json 文件 ,scripts 下增加如下配置
"produce": "MODE=produce nuxt dev",
"generate:produce": "MODE=produce nuxt generate",
# 改动后为
{
"name": "nuxt-app",
"private": true,
"type": "module",
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"produce": "MODE=produce nuxt dev",
"generate": "nuxt generate",
"generate:produce": "MODE=produce nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"nuxt": "^3.13.0",
"vue": "latest"
}
}
3. 文件内读取判断当前环境
// 当启动命令为 npm run produce
// 文件内可读取环境变量 MODE
const mode = process.env.MODE;
if(mode == "produce"){
// 线上环境
}else{
// 测试环境
}
增加中间件
1. 增加全局中间件 middleware/auth.global.js
// page.vue 文件增加如下
definePageMeta({
meta:{
isAuth:true
}
})
// 增加文件 middleware/auth.global.js 内容如下
export default defineNuxtRouteMiddleware((to, from) => {
let check = false;// 模拟未通过校验
if (!check && to.meta.meta !== undefined && to.meta.meta.isAuth){
// 校验未通过 跳转 登录
return navigateTo("/login")
}
})
2. 增加自定义中间件 middleware/auth1.js 和 middleware/auth2.js
// page.vue 文件增加如下
definePageMeta({
middleware: [
'auth1',
function (to, from) {
// 自定义内联中间件
},
'auth2',
],
});
// 增加文件 middleware/auth1.js 内容如下
export default defineNuxtRouteMiddleware((to, from) => {
let check = false;// 模拟未通过校验
if (!check && to.meta.meta !== undefined && to.meta.meta.isAuth){
// 校验未通过 跳转 登录
return navigateTo("/login")
}
})
// 增加文件 middleware/auth2.js 内容如下
export default defineNuxtRouteMiddleware((to, from) => {
let check = false;// 模拟未通过校验
if (!check && to.meta.meta !== undefined && to.meta.meta.isAuth){
// 校验未通过 跳转 登录
return navigateTo("/login")
}
})
// 执行顺序为:auth.global.ts > auth1.ts > 自定义 function > auth2.ts
增加全局CSS
1. 增加文件 assets/styles/common.css
@charset "utf-8";
*{ padding: 0;margin: 0; border: 0; list-style-type: none; text-decoration: none; font-family: '微软雅黑','宋体';color: #333;outline:none;}
2. 全局引用
// 修改文件 nuxt.config.ts 增加如下配置
css: ['~/assets/styles/common.css']
// 改动后为
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
devtools: { enabled: true },
devServer: {
host: "0.0.0.0",
port: 9501,
},
vite: {
// 增加自定义属性
define: {
'process.env.MODE': JSON.stringify(process.env.MODE || 'dev')
}
},
css: ['~/assets/styles/common.css']
})
增加pinia
1. 修改文件 package.json
# 修改文件 package.json 增加如下配置
"overrides": {
"vue": "latest"
}
# 改动后为
{
"name": "nuxt-app",
"private": true,
"type": "module",
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"produce": "MODE=produce nuxt dev",
"generate": "nuxt generate",
"generate:produce": "MODE=produce nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"nuxt": "^3.13.0",
"vue": "latest"
},
"overrides": {
"vue": "latest"
}
}
2. 安装pinia
npm install pinia @pinia/nuxt
3. 使用pinia
修改文件 nuxt.config.ts 增加如下配置
// 修改文件 nuxt.config.ts 增加如下配置
modules:[
'@pinia/nuxt',
],
// 改动后为
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
devtools: { enabled: true },
devServer: {
host: "0.0.0.0",
port: 9501,
},
modules:[
'@pinia/nuxt',
],
vite: {
// 增加自定义属性
define: {
'process.env.MODE': JSON.stringify(process.env.MODE || 'dev')
}
},
css: ['~/assets/styles/common.css']
})
增加文件 store/showStore.ts
// 增加文件 store/showStore.ts
import { defineStore, mapActions } from "pinia";
export const useShowStore = defineStore("show-store",() => {
let pageShow = ref(false);
function setPageShow(value:boolean){
pageShow.value = value;
}
return {pageShow,setPageShow}
})
使用pinia
// 修改page.vue
// 在setup内增加
import { useShowStore } from '~/store/showStore';
const showStore = useShowStore()
// 使用pinia
// template 内使用 pageShow
{{ showStore.pageShow }}
// setup内修改 pageShow
showStore.setPageShow(true)
使用前端代理proxy
// 修改文件 nuxt.config.ts 在 vite 下增加如下配置
server: {
proxy: {
'/api': {
target: 'https://you-domain.com',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '')
}
}
}
// 改动后为
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
devtools: { enabled: true },
devServer: {
host: "0.0.0.0",
port: 9501,
},
modules:[
'@pinia/nuxt',
],
vite: {
// 增加自定义属性
define: {
'process.env.MODE': JSON.stringify(process.env.MODE || 'dev')
},
server: {
proxy: {
'/api': {
target: 'https://you-domain.com',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '')
}
}
}
},
css: ['~/assets/styles/common.css']
})
服务端渲染 (SSR)
1.修改文件 nuxt.config.ts 增加如下配置
// 修改文件 nuxt.config.ts 增加如下配置
ssr: true
// 改动后为
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
devtools: { enabled: true },
ssr: true,
devServer: {
host: "0.0.0.0",
port: 9501,
},
modules:[
'@pinia/nuxt',
],
vite: {
// 增加自定义属性
define: {
'process.env.MODE': JSON.stringify(process.env.MODE || 'dev')
},
server: {
proxy: {
'/api': {
target: 'https://you-domain.com',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '')
}
}
}
},
css: ['~/assets/styles/common.css']
})
2.编译时命令
npm run generate:produce