css, images, font와 같은 리소스들을 포함한 디렉토리이다.
애플리케이션에서 사용될 컴포넌트들을 포함한 디렉토리이며, 해당 컴포넌트에서는 Nuxt.js의 비동기 데이터 함수인 asyncData
나 fecth
를 사용할 수 없다.
애플리케이션의 레이아웃을 포함한 디렉토리이다. layouts/default.vue
파일이 기본으로 설정된다.
레이아웃을 생성할 때, 페이지 컴포넌트를 실제로 포함되도록
컴포넌트를 추가해야한다.
<template>
<nuxt />
</template>
에러 페이지는 오류(404
, 500
등)가 발생하였을 때 노출되는 페이지 컴포넌트이다.
공식문서에 따르면
layouts
디렉토리에 이 파일이 위치하더라도, page처럼 다뤄져야 한다고 명시되어 있다.
이 레이아웃은 특수한 케이스로 템플릿 안에
// layouts/error.vue
...
<script>
export default {
props: ['error'],
layout: 'error' // Error 페이지에 대한 custom layout, 설정하지 않는다면 default 가 설정된다.
}
</script>
애플리케이션의 미들웨어를 포함하는 디렉토리이다. 미들웨어는 페이지나 레이아웃이 렌더링되기 전에 실행할 사용자 정의 함수를 정의할 수 있다.
모든 미들웨어는
middleware/
디렉토리 안에 있어야한다. 파일 이름은 곧 미들웨어의 이름이 된다.
미들웨어는 아래의 세 가지에서 순차적으로 실행된다.
middleware/authenticated.js
export default function(context) {
// 사용자가 인증을 하지 않은 경우
if (!store.state.authenticated) {
return context.redirect('/login');
}
}
nuxt.config.js
// 전역 바인딩
...
router: {
middleware: ['authenticated']
}
매칭된 페이지
pages/index.vue
// 특정 페이지 바인딩
...
<script>
export default {
middleware: 'authenticated'
}
</script>
애플리케이션의 view
와 route
를 포함하는 디렉토리이다.
Nuxt.js는 모든 .vue
파일을 읽고 애플리케이션의 라우터를 생성한다.
페이지 컴포넌트 내 개발의 용이함을 위한 Attr와 Func를 제공한다.
컴포넌트가 로딩되기 전에 매번 호출된다. 애플리케이션의 최초 로드시, 서버 사이드에서 한 번 호출되고, 이후 route 이동 시 클라이언트 사이드에서 호출된다.
context
를 인자로 전달 받아 컴포넌트 데이터와 병합한다.
asyncData
안에서 컴포넌트를 참조하기 위해 this
를 사용하지 않는다. 컴포넌트가 생성되기 전에 호출되기 때문에 this
에 접근할 수 없다.
페이지가 랜더링되기 전에 데이터를 Store
에 넣기위해 사용한다. 컴포넌트의 데이터를 세팅하지 않는 점을 빼고는 data
메소드와 비슷하다.
현재 페이지에 대한 특정 태그를 설정한다.
export default {
head () {
return {
title: '타이틀',
meta: [
{
hid: '유니크한 아이디',
name: '설명',
content: '커스텀한 설명'
}
]
}
}
}
공식문서에 따르면 하위 컴포넌트 사용할 때, 중복을 피하려면 유니크한 id인
hid
값을 부여하도록 한다.
layouts
폴더에 정의된 정의된 레이아웃을 지정할 수 있다.
export default {
layout: 'custom',
// 또는
loyout(context) {
return 'custom'
}
}
페이지 컴포넌트에서 사용할 layout을 정의하기 위해서 loyout
키를 정의한다.
정의하지 않으면 layouts
디렉토리의 default.vue
가 기본값으로 정의된다.
Nuxt.js 자체 컴포넌트를 이용하여 경로 사이의 progress bar
를 설정할 수 있다.
nuxt.config.js
module.exports = {
loading: false
// 또는
loading: {
color: "blue",
height: "5px"
}
}
progress bar
의 CSS 색상progress bar
의 CSS 색상progress bar
의 높이progress bar
의 최대 진행시간사용자가 Loading 컴포넌트를 정의할 수 있다.
nuxt.config.js
module.exports = {
loading: '~/components/loading.vue'
}
components/loading.vue
<template>
<div class="loading-page" v-f="loading">
로딩중...
</div>
</template>
<script>
export default {
data() {
return {
loading: false
}
},
methods: {
// 경로가 변경될 때 호출
start() {
this.loading = true
},
// 경로가 로드되었을 때 호출
finish() {
this.loading = false
},
// 경로가 로드되지 않았을 떄 호출
fail(error) {}
}
}
</script>
<style scoped>
.loading-page {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.8);
text-align: center;
padding-top: 200px;
font-size: 30px;
font-family: sans-serif;
}
</style>
동적 라우트에 대한 유효성을 검사한다.
Nuxt.js 라우트에서 확인
페이지에 대한 미들웨어를 설정하면 미들웨어는 페이지를 렌더링하기 전에 호출한다.
모든 미들웨어는
middleware/
디렉토리에 있어야한다. 파일 이름은 곧 미들웨어 이름이 된다.
애플리케이션이 생성되기 전 실행하고 싶은 자바스크립트 플러그인을 포함하는 디렉토리이다.
Vuex Store
파일을 포함하는 디렉토리이다. 기본적으로 비활성화 상태이며, store/index.js
파일을 생성하면 프레임워크가 자동으로 Store를 활성화 시킨다.
Nuxt.js는 store
디렉토리가 존재한다면,
Vue 인스턴스에 store
옵션 추가
Nuxt.js에서는
2가지 store 모드
를 지원한다.
모드와 관계없이, 서버 측에서 원치 않을 상태 공유를 방지하려면 state 값은 항상 함수여야 한다.
store
디렉토리에서 모든 모듈을 관리하며, 모듈 별로 store
를 생성한다.
store/index.js
// 위 언급한 바 state는 항상 함수여야 한다.
export const state = () => ({
counter: 0
})
export const mutations = {
increment(state) {
state.counter++
}
}
store/todos.js
export state = () => ({
list: []
})
export const mutations = {
ADD(state, text) {
state.list.push({ text, done: false });
},
REMOVE(state, { todo }) {
state.list.splice(state.list.indexof(todo), 1);
},
TOGGLE(state, todo) {
todo.done = !todo.done;
}
}
페이지 컴포넌트에서 todos 모듈 사용
pages/todos.vue
<template>
...
</template>
<script>
import { mapMutations } from 'vuex'
export default {
computed: {
todos() {
return this.store.state.todos.list
}
},
methods: {
addTodo(e) {
this.$store.commit('todos/ADD', e.target.value);
e.target.value = '';
},
...mapMutations({
toggle: 'todos/TOGGLE'
})
}
}
</script>
공식문서에 따르면 Next3에서는 삭제될 예정이다.
Nuxt.js의 사용자 정의 설정을 포함하는 파일이다.
Nuxt.js 기본 설정된 기능을 이 파일을 통해서 덮어 쓸 수 있도록 되어있다.
따로 설정을 변경하지 않는다면
~
또는@
은 src 디렉토리를 가리킨다.
인자 혹은 파라미터로 전달되는 context
의 요소
{ app, store, route, params, env, isDev, isHMR, redirect, error }
route.params
route.qurey
nuxt.config.js
에 설정되어 있는 환경변수