https://blog.csdn.net/snowball_li/article/details/128013833
运行环境
nodejs > 16.x.x
nuxt3项目初始化
1
| pnpm dlx nuxi init nuxt-app
|
1 2 3 4 5 6 7
| alias: { "@": resolve(__dirname, "./"), "@pages": resolve(__dirname, "./pages"), "@server": resolve(__dirname, "./server"), 'images': resolve(__dirname, './assets/images'), 'style': resolve(__dirname, './assets/style'), },
|
- 配置 tsconfig.json
1 2 3 4 5 6 7 8 9 10 11 12
| { "extends": "./.nuxt/tsconfig.json", "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["./*"], "@pages/*": ["./pages/*"], "@server/*": ["./server/*"] } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| export default defineNuxtConfig({ , vite: { server: { proxy: { '/api': { target: 'http://127.0.0.1:3000/', } }, } } , nitro: { devProxy: { "/api": { target: 'http://127.0.0.1:3000/', prependPath: true, changeOrigin: true, } } } })
|
1 2 3 4
| pnpm install element-plus pnpm add sass sass-loader -D pnpm add unplugin-auto-import unplugin-icons unplugin-vue-components -D
|
assets/scss/index.scss
1
| @use "element-plus/dist/index.css";
|
tsconfig.json
1 2 3 4 5 6 7
| { "extends": "./.nuxt/tsconfig.json", "compilerOptions": { "types": ["element-plus/global"] } }
|
nuxt.config.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import AutoImport from 'unplugin-auto-import/vite' import Components from "unplugin-vue-components/vite"; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import IconsResolver from "unplugin-icons/resolver"; const lifecycle = process.env.npm_lifecycle_event; export default defineNuxtConfig({ vite: { plugins: [ AutoImport({ resolvers: [ ElementPlusResolver( ), IconsResolver()] }), Components({ dts: true, resolvers: [ElementPlusResolver( { importStyle: false } )] }), ], }, components: true, css: ["~/assets/scss/index.scss"], transpile: ["element-plus"], build: { transpile: lifecycle === "build" ? ["element-plus"] : [], }, })
|
plugins/element-plus.ts
1 2 3 4 5 6 7 8 9
| import { ID_INJECTION_KEY } from 'element-plus'; export default defineNuxtPlugin(nuxtApp => { nuxtApp.vueApp.provide(ID_INJECTION_KEY,{ prefix: Math.floor(Math.random() * 10000), current: 0, }) })
|
pages/index.vue
1
| <el-button> ElButton </el-button>
|
1 2 3
| export default defineNuxtConfig({ build: { transpile: ["echarts"] }, })
|
直接安装 less 或 sass包即可支持。
1
| npm install --save less less-loader
|
vite配置,nuxt.config.ts配置vite。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| export default defineNuxtConfig({ css: ['@/assets/css/index.css'], vite: { css: { preprocessorOptions: { scss: { additionalData: '@use "@/assets/css/index.scss" as *;' } } } } })
|
- 安装依赖
1
| pnpm install normalize.css
|
- app.vue 进入
1 2 3
| <script setup> import "normalize.css/normalize.css"; <script/>
|
常见用法
1 2 3
| useHead({ title: 'snow-title-2' })
|
1 2 3 4
| <div> <img src="~/assets/nginx.jpg" alt="nginx"> <img src="~/public/nginx.jpg" alt="nginx"> </div>
|
1 2 3
| definePageMeta({ layout: 'layout-snow' })
|
- middleware 中间件,鉴权
/middleware/auth.ts
1 2 3
| export default defineNuxtRouteMiddleware((to, from)=>{ console.log("auth") })
|
使用 /pages/plugin.vue
1 2 3 4 5 6 7
| <script setup lang="ts"> definePageMeta({ middleware: ["auth", "snow"] }) </script>
|
- server 服务开发
server/api/test.get.ts
1 2 3
| export default defineEventHandler((event) => { return `test get ts` })
|
- ssr 服务端渲染部署
node 启动
1
| node ./.output/server/index.mjs
|
pm2 启动 pm2.js
安装pm2 pnpm add -g pm2(如果提示setup,则执行pnpm setup,并更新配置 source ~/.zshrc
1 2 3 4 5 6 7 8 9 10
| module.exports = { apps: [ { name: "NuxtAppName", exec_mode: "cluster", instances: "max", script: "./.output/server/index.mjs", }, ], };
|
pm2 常用指令
1 2 3 4 5 6 7
| pm2 start xxx.js pm2 stop id pm2 stop all pm2 list pm2 logs pm2 reload all pm2 delete all
|
- 静态页面部署