티스토리 뷰
1. Nuxt.js Project
Nuxt.js 프로젝트를 신규로 생성하면 위의 구조를 가진다. nuxt.js는 vue를 이용한 페이지를 만들 수 있는 프레임워크다. 그렇기 때문에 nuxt.js에 대한 기본적인 구성을 알고 개발을 시작해야 한다.
- assets
SASS, LESS나 빌드에 필요한 JavaScript 파일이 포함한다.
- component
nuxt.js에서 사용되는 컴포넌트들을 포함한다. 컴포넌트는 화면에서 사용되는 각각의 요소를 의미한다. (vue.js에서 배운 component와 동일하다.)
- layouts
nuxt.js에서 사용하는 기본 레이아웃이 존재한다. 애플리케이션에서 상단 탭이나 하단 탭과 같이 모든 페이지에서 동일하게 적용되는 레이아웃이 담긴다. 만약 사용자가 새로 레이아웃을 만들어 적용한다면 한번만 정의해서 페이지를 만들 수 있다.
- middleware
레이아웃, 페이지가 렌더링되기 전에 실행되는 파일이 정의된다.
- pages
웹 애플리케이션에서 보게되는 페이지 파일을 담는 곳이다. 앞서 배운 vue.js 파일이 해당 폴더에 포함된다.
- plugins
vue로 만든 웹 애플리케이션이 생성되기 전에 실행시키고 싶은 js 파일이 담긴다. 주로 외부에서 설치한 모듈이 이곳에 들어간다. (axios, vue-notification 등)
- static
정적 요소들이 들어간다. (CSS, JavaScript 등)
- store
데이터 관리를 도와주는 라이브러리인 vuex가 들어있다.
- Package.json
프로젝트의 의존성 모듈, 스크립트를 포함하는 파일이다. JavaScript 파일에 있어 기본적인 요소를 포함한다. npm install을 하게 되면 모듈이 설치되는데, 이 떄 설치되는 모듈 정보를 이곳에서 포함하게 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "name": "test1", "version": "1.0.0", "description": "My delightful Nuxt.js project", "author": " ", "private": true, "scripts": { "dev": "nuxt", "build": "nuxt build", "start": "nuxt start", "generate": "nuxt generate" }, "dependencies": { "nuxt": "^2.0.0" }, "devDependencies": {} } | cs |
프로젝트에 포함되는 각각의 구조들이 Nuxt에서 어떻게 작동히는지는 아래의 링크에 들어가면 파악할 수 있다.
링크 : https://ko.nuxtjs.org/guide/directory-structure
2. Nuxt.js Setting
페이지를 개발하기 전 Nuxt.js에 대한 설정 관리 작업을 해줘야한다. 설정 관리란 우리가 만들려는 애플리케이션을 만들기 위한 기본 설정을 정의 내리기 위한 것이다. 우린 이 작업을 통해 프로젝트 전체에 영향을 미치게 되는 요소들을 쉽게 개발하고 유지보수를 할 수 있다. Nuxt.js는 Vue 애플리케이션을 개발하기 위한 프레임워크로 해당 부분에 대한 세팅이 무엇보다 중요하다.
<nuxt.config.json>
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | export default { mode: 'universal', /* ** Headers of the page */ head: { title: process.env.npm_package_name || '', meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: process.env.npm_package_description || '' } ], link: [ { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } ] }, /* ** Customize the progress-bar color */ loading: { color: '#fff' }, /* ** Global CSS */ css: [ ], /* ** Plugins to load before mounting the App */ plugins: [ ], /* ** Nuxt.js dev-modules */ buildModules: [ ], /* ** Nuxt.js modules */ modules: [ ], /* ** Build configuration */ build: { /* ** You can extend webpack config here */ extend (config, ctx) { } } } | cs |
nuxt.config.json는 nuxt.js의 설정 정보를 정의해주는 파일이다. 이곳에서 build, cache, css, dev, env, generate, head, loading, plugin, rootDir, router, srcDir, transition의 기본 설정을 덮어 씌울 수 있다.
- head
애플리케이션에서 사용하는 기본 메타에 대해 정의한다.
1 2 3 4 5 6 7 8 9 10 11 | head: { title: process.env.npm_package_name || '', meta: [ { charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, { hid: 'description', name: 'description', content: process.env.npm_package_description || '' } ], link: [ { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } ] }, | cs |
charset과 같이 웹 페이지에 head에 해당하는 기본 값들에 대한 정의를 내린다.
- cache
컴포넌트 캐시의 허용 유무를 작성한다.
1 2 3 4 | cache: { max: 1000, maxAge: 1000 * 60 * 60 } | cs |
캐시의 경우 너무 커지게 되면 메모리 공간을 많이 차지하게 되므로 적당한 값을 선정하는 것이 중요하다. 캐시의 경우 max에는 컴포넌트의 수와 캐시가 되는 시간 2가지를 설정해주면된다.
- max: 캐시에 사용되는 컴포넌트의 수
- maxAge: 캐시 시간 (ms)
- CSS
애플리케이션에서 전역으로 사용되는 css를 정의한다.
- loading
페이지 이동 시에 상단에 뜨는 프로그래스 바에 대한 설정을 한다.
프로그래스 바의 사용을 원치 않는 다면 아래와 같이 작성하면 된다.
1 2 3 4 | /* ** Customize the progress-bar color */ loading: false, | cs |
사용자 정의의 프로그래스 바를 세팅한다면 아래와 같이 진행할 수 있다.
1 2 3 4 5 6 | loading: { color: 'yellow', height: '5px', failedColior: 'red', duration: 1000 * 10 }, | cs |
- color : 프로그래스 바의 색상
- height : 프로그래스 바의 높이
- failedColor : 에러 발생 시 프로그래스 바 색상
- duration : 프로그래스 바의 최대 진행시간
위에서 설명된 내용 이외의 설정 세팅 정보는 아래 링크에서 확인 가능하다.
링크 : https://ko.nuxtjs.org/guide/configuration
3. Nuxt.js Route
라우트는 pages의 디렉터리 구조를 기반으로 vue-router를 설정해준다. 즉, 이 곳에 정의된 정보를 통해 pages 안에 존재하는 디렉터리와 파일에 대한 주소가 만들어진다.
라우팅은 크게 동적과 정적으로 구분이 된다.
- 정적 라우트
고정된 URL을 사용하여 페이지를 요청한다. Pages 폴더의 구조가 아래와 같다.
1 2 3 4 5 | pages/ --| user/ -----| index.vue -----| one.vue --| index.vue | cs |
이 경우 URL은 각각 다음과 같이 설정이 된다.
- pages/index.vue : [domain]/
- pages/user/index.vue : [domain]/user/
정적라우트에서 user 디렉터리 아래 one.vue 라는 신규 페이지를 만들게 되면 해당 URL은 다음과 같다.
- pages/user/one.vue : [domain]/user/one
이 의미는 각 디렉터리의 첫 페이지는 index가 담당하게 되고 나머지 페이지의경우 우리가 저장한 페이지의 이름에 따라 정의를 내리면 된다.
이렇게 선언된 경우 동적으로 생성된 페이지를 nuxt-link 태그를 이용하여 이동한다.
1 2 3 | <nuxt-link to="/one" target="_blank" class="button--green"> Documentation </nuxt-link> | cs |
- 동적 라우팅
동일한 페이지를 여러개 만드는 경우도 발생한다. 예를 들어 사용자의 이름만 다른 중복된 페이지를 여러개 만드는 경우를 생각 할 수 있다. 이런 경우 사용자 마다 모든 페이지를 하나하나 만드는 것은 사실상 불가능하다. 이 경우 우리는 URL을 동적으로 생성해주어야 한다.
동적 URL을 만들기 위해서는 이름 앞에 언더바 키워드(_)를 사용한다.
1 2 3 4 5 6 7 | pages/ --| _slug/ -----| comments.vue -----| index.vue --| users/ -----| _id.vue --| index.vue | cs |
위의 구조로 디렉터리를 세팅하게 된다면 라우팅 정보는 아래와 같이 담기게 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | router: { routes: [ { name: 'index', path: '/', component: 'pages/index.vue' }, { name: 'users-id', path: '/users/:id?', component: 'pages/users/_id.vue' }, { name: 'slug', path: '/:slug', component: 'pages/_slug/index.vue' }, { name: 'slug-comments', path: '/:slug/comments', component: 'pages/_slug/comments.vue' } ] } | cs |
이처럼 언더바 앞에 붙은 페이지의 경로에 " : " 가 붙은 것을 확인 할 수 있다. 그리고 이는 URL에서 선택정 경로를 설정할 수 있는 것을 의미한다.
그리고 _id 자리에는 어떠한 값이 들어가도 해당 URL로 이동하게 된다.
1 2 3 4 5 6 7 8 9 10 | <nuxt-link to="users/1" target="_blank" class="button--green"> 사용자 1 정보 </nuxt-link> <nuxt-link to="users/2" target="_blank" class="button--green"> 사용자 2 정보 </nuxt-link> <nuxt-link to="users/3" target="_blank" class="button--green"> 사용자 3 정보 </nuxt-link> | cs |
'Skill > Programming - Server & Client' 카테고리의 다른 글
14. [Nuxt.js] Layout (0) | 2020.02.16 |
---|---|
13. [Nuxt.js] Pages & API (0) | 2020.02.02 |
11.[Nuxt.js] 개념 및 소개 (0) | 2020.01.19 |
10.[Vue.js] 컴포넌트(Components) (0) | 2020.01.05 |
9.[Vue.js] 클래스, 스타일 바인딩 (0) | 2019.12.31 |