반응형

 


디렉토리 구조

2022년 9월 기준 디렉토리 구조는 아래의 이미지와 같습니다.

20개라는 수가 부담스럽지만, 하나하나 확인해보겠습니다.


app.vue

app.vue 는 Nuxt3 앱의 메인 컴포넌트입니다.

라우팅 기능과 pages의 사용은 필수가 아니기 때문에 ,

순수하게 app.vue를 다음과 같이 사용할 수 있습니다.

<template>
  <h1>Hello World</h1>
</template>

 

 

만약 pages 디렉토리를 구성했다면, 다음과 같이 사용할 수 있습니다.

~/pages/index.vue

<template>
  <div>
    텍스트
  </div>
</template>

<script>
export default {
  name: "index"
}
</script>

<style scoped>

</style>
app.vue

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

app.vue 가 메인 컴포넌트라는걸 명심해야 합니다.

app.vue 에 추가하는 스크립트나 CSS 는 전역적으로 적용됩니다.


layouts

Nuxt는 layouts 디렉토리를 이용해 앱 전체에서 사용할 수 있는 레이아웃을 커스터마이징 할 수 있게 지원합니다.

UI 와 코드 패턴을 재사용하는데 이상적입니다.

레이아웃은 layouts 디렉토리에 위치하며, 자동 import 되어 사용되어집니다.

 

레이아웃의 사용법은 app.vue 에 <NuxtLayout> 을 추가하는 것입니다.

 

레이아웃 명명에는 보통 케밥 케이스가 사용됩니다.

예를 들어, someLayout -> some-layout 이 됩니다.

 

만약 레이아웃이 하나밖에 없는 앱이라면 layouts 디렉토리를 사용하지 말고, app.vue 만을 사용하는 것을 권장합니다.

 

다음은 간단한 사용 예입니다.

<NuxtLayout> 은 default 로 ~/layouts/default.vue 를 import 합니다.

~/layouts/default.vue

<template>
  <div>
    Layout은 모든 페이지에서 공유됩니다.
    <br>
    <slot/>
  </div>
</template>

<script>
export default {
  name: "default"
}
</script>

<style scoped>

</style>
app.vue

<template>
  <div>
    <NuxtLayout>
      slot 을 임의의 문장으로 채워봅시다.
    </NuxtLayout>
  </div>
</template>

 

default 레이아웃이 아닌 레이아웃을 지정해서 사용해보겠습니다.

~/layouts/layout-one.vue

<template>
  <div>
    Layout-One 레이아웃입니다.
    <br>
    <slot/>
  </div>
</template>

<script>
export default {
  name: "layout-one"
}
</script>

<style scoped>

</style>
app.vue

<template>
  <div>
    <NuxtLayout :name="layoutName">
      slot 을 임의의 문장으로 채워봅시다.
    </NuxtLayout>
  </div>
</template>

<script setup>
const layoutName = "layout-one"
</script>

 

이제 응용하여 동적으로 레이아웃을 변경해보겠습니다.

 

 


.nuxt

개발 모드로 Nuxt3 앱을 실행할 때 해당 디렉토리에 Nuxt3 앱이 생성됩니다.

.output

운영 모드로 Nuxt3 앱을 실행할 때 해당 디렉토리에 Nuxt3 앱이 생성됩니다.

Asseets

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

Nuxt3 프로젝트 개발 및 운영 모드 포트번호 설정 방법입니다.

 

 

1. 개발 모드

/package.json 파일 설정 (default port 는 3000)

 

{
  "private": true,
  "scripts": {
    "dev": "nuxi dev --port 3001",
    "build": "nuxi build",
    "start": "node .output/server/index.mjs"
  },
  "devDependencies": {
    "nuxt3": "latest"
  }
}

 

2. 운영 모드

/package.json 파일 설정 (default port 는 3000)

 

{
  "private": true,
  "scripts": {
    "dev": "nuxi dev",
    "build": "nuxi build",
    "start": "PORT=3333 node .output/server/index.mjs"
  },
  "devDependencies": {
    "nuxt3": "latest"
  }
}

 

직접 수정 방식 (권장하지 않음)

/.output/server/chunks/nitro/node-server.mjs(361행)

/.output 디렉토리는 Nuxt 애플리케이션을 운영모드로 빌드할 때 생성됩니다.

 

const port = destr(process.env.NITRO_PORT || process.env.PORT) || 3e3;

=>

const port = destr(process.env.NITRO_PORT || process.env.PORT) || 3333;

 

 

 

참고 문서:

https://v3.nuxtjs.org/api/commands/dev/

 

nuxi dev

- Website: https://v3.nuxtjs.org/ - Setup and Contribution Guide: https://v3.nuxtjs.org/community/contribution#documentation-guide

v3.nuxtjs.org

https://v3.nuxtjs.org/guide/deploy/node-server/#configuring-defaults-at-runtime

 

Node.js Server

Discover the Node.js server preset with Nitro to deploy on any Node hosting.

v3.nuxtjs.org

 

 

오늘도 좋은 하루 보내세요.

감사합니다.

반응형

'Nuxt3 > 정리' 카테고리의 다른 글

#1 Head Management  (0) 2022.04.28
반응형

Nuxt3은 기본적으로 charset 및 viewport 등 다양한 메타 태그를 지원하고 있습니다.

필요할 경우 커스터마이징 할 수 있을 뿐만 아니라 여러 가지 방법으로 다른 메타 태그들을 지정할 수 있습니다.

메타 태그들은 다음 세 가지 방식으로 설정할 수 있습니다.

 

 

  1. useHead Composable을 사용하는 방식
  2. Meta 컴포넌트를 사용하는 방식
  3. nuxt.config.ts 설정 방식

 

 

1. useHead Composable을 사용하는 방식

setup 함수 안에 useHead Composable을 사용하여 다양한 메타 태그를 호출할 수 있습니다.

또한 reactive한 메타데이터에 대한 개체를 반환하는 함수를 전달할 수도 있습니다.

 

다음은 동적으로 Meta 데이터를 설정하는 방법입니다.

<script setup> 에서 Route를 이용하여 매개변수를 받고

viewProduct 함수를 호출합니다. (하단에 다른 파일에 모듈화된 viewProduct 함수가 있습니다.)

함수를 통해 받아온 data 를 useHead Composable을 통해 동적으로 적용합니다.

 

<script setup>
import {useHead, useRoute} from "nuxt3/app";
import {viewProduct} from "../../useFetch";

const route = useRoute()

const { data } = await viewProduct(route.params.productId)

useHead({
  meta: [
    { name: '상품이름', content: JSON.stringify(data.value.name) },
    { name: '상품내용', content: JSON.stringify(data.value) },
    { name: '상품등록일', content: JSON.stringify(data.value.registerDate) }
  ]
})

</script>

 

viewProduct 함수

function viewProduct(data) {
    const url = baseURL+'product/'+data
    return useAsyncData('product', () => $fetch(url))
}
 

페이지 호출 시 다음과 같은 메타 데이터를 확인할 수 있습니다.

<head >
  <meta name="상품이름" content="&quot;과자&quot;">
  <meta name="상품내용" content="{&quot;productId&quot;:5,&quot;name&quot;:&quot;과자&quot;,&quot;price&quot;:1000,&quot;content&quot;:&quot;달달한 과자&quot;,&quot;stock&quot;:100,&quot;categoryId&quot;:1000,&quot;registerDate&quot;:&quot;2022-04-21T09:36:50.572317&quot;}">
  <meta name="상품등록일" content="&quot;2022-04-21T09:36:50.572317&quot;">
</head>

 

 

2. Meta 컴포넌트를 사용하는 방식

Nuxt는 메타데이터를 조작할 수 있게 다음 컴포넌트를 제공합니다.

이 컴포넌트 이름은 HTML의 기본적인 element와 일치하므로 템플릿에서 대문자로 시작해서 차이를 주는게 중요합니다.

<Title> <Base> <Script> <Style> <Meta> <Link> <Body> <Html> <Head>

 

다음은 동적으로 Meta 데이터를 설정하는 방법입니다.

<script setup> 에서 Route를 이용하여 매개변수를 받고

viewProduct 함수를 호출합니다. (하단에 다른 파일에 모듈화된 viewProduct 함수가 있습니다.)

 

<script setup>
import {useRoute} from "nuxt3/app";
import {viewProduct} from "../../useFetch";

const route = useRoute()

const { data } = await viewProduct(route.params.productId)

</script>

 

viewProduct 함수

function viewProduct(data) {
    const url = baseURL+'product/'+data
    return useFetch(url);
}

 

받아온 데이터를 Meta 컴포넌트에 동적으로 적용합니다.

    <Head>
      <Title>titleHeadTest</Title>
        <Meta name="productId" :content='JSON.stringify(data.productId)'/>
        <Meta name="productName" :content='data.name'/>
        <Meta name="productPrice" :content='JSON.stringify(data.price)'/>
        <Meta name="productContent" :content='data.content'/>
        <Meta name="productStock" :content='JSON.stringify(data.stock)'/>
        <Meta name="productCategoryId" :content='JSON.stringify(data.categoryId)'/>
        <Meta name="productRegisterDate" :content='data.registerDate'/>
    </Head>

 

페이지 호출 시 다음과 같은 메타 데이터를 확인할 수 있습니다.

<!DOCTYPE html>
<html  data-head-attrs="">

<head >
  <title>titleHeadTest</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="companyName" content="plateer">
  <meta name="teamName" content="EC1">
  <meta name="projectName" content="nuxt3">
  <meta name="productId" content="5">
  <meta name="productName" content="&quot;과자&quot;">
  <meta name="productPrice" content="1000">
  <meta name="productContent" content="&quot;달달한 과자&quot;">
  <meta name="productStock" content="100">
  <meta name="productCategoryId" content="1000">
  <meta name="productRegisterDate" content="&quot;2022-04-21T09:36:50.572317&quot;">​

 

 

3. nuxt.config.ts 설정 방식

/nuxt.config.ts 파일에 아래와 같이 설정할 수 있습니다.

 
import { defineNuxtConfig } from 'nuxt3'

// https://v3.nuxtjs.org/docs/directory-structure/nuxt.config
export default defineNuxtConfig({
    app: {
        head: {
            meta: [
                { name: 'companyName', content: 'ABCD'},
                { name: 'teamName', content: 'KKK'},
                { name: 'projectName', content: 'Nuxt3'}
            ]
        }
    }
})

 

설정한 메타 데이터를 앱 전역적으로 확인할 수 있습니다.

<head >
 <meta name="companyName" content="ABCD">
 <meta name="teamName" content="KKK">
 <meta name="projectName" content="nuxt3">
</head>

 

참고문서:

https://v3.nuxtjs.org/guide/features/head-management

 

 

이상입니다.

오늘도 좋은 하루 보내세요.

반응형

'Nuxt3 > 정리' 카테고리의 다른 글

#2 포트번호 설정  (0) 2022.04.28

+ Recent posts