Skip to content

Nuxt3 区分环境和视图层

区分环境

新建

根目录新建三个文件分别是

  • .env.development

  • .env.production

  • .env.test

bash

├── app
 ├── components
 ├── layouts
 ├── pages
 ├── plugins
 ├── styles
 ├── utils
 └── composables
├── assets
├── composables
├── layouts
├── pages
├── plugins
├── public
├── styles
├── .env.development
├── .env.production
├── .env.test
├── nuxt.config.ts
└── package.json

里面分别写

.env.development

ts
# 环境变量
VITE_MODE=development
# 基地址
VITE_BASE_URL=xxx.com

.env.production

ts

# 环境变量
VITE_MODE=production
# 基地址
VITE_BASE_URL=xxx.com

.env.test

ts
# 环境变量
VITE_MODE=development
# 基地址
VITE_BASE_URL=xxx.com

package.json 配置

ts
 "build": "nuxt build --dotenv .env.production",
 "build:dev": "nuxt build --dotenv .env.development",
 "serve": "nuxt dev --dotenv .env.development",
 "preview": "nuxt preview --dotenv .env.production",
 "servepro": "nuxt dev --dotenv .env.production",

nuxt.config.ts 配置

ts
export default defineNuxtConfig({
  compatibilityDate: "2024-11-01",
  devtools: { enabled: true },
  // 测试环境读取
  runtimeConfig: {
    // 仅仅在服务端
    baseUrl: process.env.VITE_BASE_URL,
    // 客户端也读取
    public: {
      baseUrl: process.env.VITE_BASE_URL,
    },
  },
  // 这里是方便生产环境读取
  appConfig: {
    mode: process.env.VITE_MODE,
    baseUrl: process.env.VITE_BASE_URL,
  },
});

页面调用

这里最好用 useAppconfig 因为不用他生产环境掉不出来

html
<script setup lang="ts">
  console.log(useRuntimeConfig());
  console.log(useAppConfig().baseUrl); // const
  runtimeConfig = useRuntimeConfig(); // console.log(runtimetimeConfig);
</script>

视图层

布局

  • 修改 app.vue
html
<template>
  <div>
    <NuxtLayout>
      <NuxtPage />
    </NuxtLayout>
  </div>
</template>

<script setup lang="ts"></script>

创建 layouts 文件夹

里面两个文件

bash
├── layouts
   ├── default.vue
   ├── login.vue
  • login.vue
html
<template>
  <div>
    <div>登录布局</div>
    <slot></slot>
  </div>
</template>

<script setup lang="ts"></script>

<style scoped></style>
  • default.vue
html
<template>
  <div>
    <div>默认布局</div>
    <slot></slot>
  </div>
</template>

<script setup lang="ts"></script>

<style scoped></style>

新建 pages 文件夹

下面新建 index.vue, admin.vue, login.vue

bash
├── pages
   ├── index.vue
   ├── login.vue
   ├── admin.vue
  • index.vue
html
<template>
  <div>首页</div>
</template>

<script setup lang="ts"></script>

<style scoped></style>
  • login.vue(指定 layout)
html
<template>
  <div>登录页面内容</div>
</template>

<script setup lang="ts">
  definePageMeta({
    layout: "login",
  });
</script>

<style scoped></style>
  • admin.vue
html
<template>
  <div>默认页面页面内容</div>
</template>

<script setup lang="ts"></script>

<style scoped></style>

新建 components 文件夹

下面新建目录如下

bash
├── components
   ├── sidebar
   ├── content
   ├── sidebarcontent.vue
   ├── testindex
   ├── header.vue

Nuxt 做了自动导入可以直接使用

ts
<template>
    <div>
        首页
        <TestindexHeader></TestindexHeader>
        <SidebarContentSidebarcontent></SidebarContentSidebarcontent>
    </div>
</template>

<script setup lang="ts"></script>

<style scoped></style>