[컴] Nuxt 의 Routing 사용해보기

넉스트 / auto route routing / vue-route / 라우팅 /hello world

Nuxt 의 Routing 사용해보기

nuxt 가 자동으로 routing 을 해준다. 원래 vue.js 나 react 에서는 route 관련 library 를 사용했다. 하지만 그렇지 않아도 nuxt 만 설치하면 그 부분은 자동으로 설정이 된다.

예를 들어, 우리가 MyApp.vue 를 만들고 compile(transpile) 을 해서 static server 에 올려놓는다고 해도 MyApp 을 바로 접근할 수는 없다. 하지만 Nuxt 는 MyApp.vue 를 만들어서 pages directory 에 넣으면 바로 /MyApp 에 접근할 수 있다.

Nuxt 설치

npm init
...
npm i nuxt

package.json 에 scripts 추가

  "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "generate": "nuxt generate",
    "start": "nuxt start"
  }, 

index.vue 추가

pages 라는 directory 를 만들자. 그리고 그 안에 index.vue file 을 넣자.

// directory 구조

<nuxt-proj-root> ---+--- package.json
                    |
                    +--- node_modules
                    |
                    +--- pages --+--- index.vue

// index.vue
<template>
  <h1>Hello world!</h1>
</template>

Nuxt 실행

그리고 npm run dev 를 실행하자.

D:\nuxt>npm run dev

> test1@1.0.0 dev D:\a\prog\nodejs\nuxt\test1
> nuxt


i NuxtJS collects completely anonymous data about usage.                                                      16:43:21
  This will help us improve Nuxt developer experience over time.
  Read more on https://git.io/nuxt-telemetry

? Are you interested in participating? No


   ╭───────────────────────────────────────╮
   │                                       │
   │   Nuxt @ v2.15.4                      │
   │                                       │
   │   ▸ Environment: development          │
   │   ▸ Rendering:   server-side          │
   │   ▸ Target:      server               │
   │                                       │
   │   Listening: http://localhost:3000/   │
   │                                       │
   ╰───────────────────────────────────────╯

i Preparing project for development                                                                           16:43:29
i Initial build may take a while                                                                              16:43:29
√ Builder initialized                                                                                         16:43:29
√ Nuxt files generated                                                                                        16:43:29

* Client █████████████████████████ building (10%) 3/4 modules 1 active
 babel-loader » .nuxt\client.js


* Client █████████████████████████ building (10%) 5/9 modules 4 active
 node_modules\webpack-hot-middleware\client-overlay.js


* Client █████████████████████████ building (10%) 7/9 modules 2 active
 node_modules\webpack-hot-middleware\client-overlay.js


* Client █████████████████████████ building (11%) 9/9 modules 0 active


* Server █████████████████████████ building (10%) 2/2 modules 0 active



 WARN  Though the "loose" option was set to "false" in your @babel/preset-env config, it will not be used for @babel/plugin-proposal-private-methods since the "loose" mode option was set to "true" for @babel/plugin-proposal-class-properties.
The "loose" option must be the same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods and @babel/plugin-proposal-private-property-in-object (when they are enabled): you can silence this warning by explicitly adding
        ["@babel/plugin-proposal-private-methods", { "loose": true }]
to the "plugins" section of your Babel config.

그러면 http://localhost:3000/ 에 접속하면 index.vue 에 써놓은 것을 볼 수 있다.

만약에 pages directory 에 newpage.vue 를 만든다면, http://localhost:3000/newpage 로 접근할 수 있다.

nuxt generate

npm run generate을 하면 nuxt generate 을 실행하게 된다. 이러면, nuxt.config 의 target 이 static 인 경우에 static version 을 만들어주게 된다. 기본적으로 target 은 'server' 이지만, nuxt generate 인 경우는 그냥 target 에 상관없이 dist 에 generate 된다.

// nuxt.config.js
export default {
  target: 'static', // default is 'server'
  build: {
    publicPath: '/nuxt/_nuxt',   //  /_nuxt/adfa.js 에서 가져오던 것을 'nuxt/_nuxt/adfa.js' 에서 가져온다.
    html: {
      minify : {
          collapseBooleanAttributes: true,
          decodeEntities: true,
          minifyCSS: true,
          minifyJS: false,
          processConditionalComments: true,
          removeEmptyAttributes: true,
          removeRedundantAttributes: true,
          trimCustomFragments: true,
          useShortDoctype: true
      }
    }
  },
  generate: {
    dir: 'templates/nuxt'
    subFolders: false
  }
}

참고로 next.config 로도 동작은 한다. 하지만 next.config.js 가 syntax error 같은 것들을 정확히 알려준다.

static version 은 <nuxt-proj-root>/dist 에 만들어진다.

만약 아래 같은 구조였다면,

<nuxt-proj-root> ---+--- package.json
                    |
                    +--- node_modules
                    |
                    +--- pages --+--- index.vue
                                 +--- fun.vue

아래처럼 생성된다.

<nuxt-proj-root> ---+ ...
                    |
                    + ...
                    |
                    +--- dist --+--- index.html
                                |
                                +--- fun (dir) ----- index.html
                                |
                                +--- _nuxt -- *.js

Nested Routes

기본적으로 아래처럼, pages 의 모습을 가져가면 netsted route 이 된다.

즉, https://localhost/parenthttps://localhost/parent/child 에 접근이 된다.

<nuxt-proj-root>
    |
    + pages/
        |
        + parent.vue
        |    
        + parent (dir)
            |
            + child.vue

See Also

  1. 쿠…sal: [컴] nuxtjs 에서 process.env 사용하기
  2. Nuxt - Nuxt configuration file : page transition , 페이지 전환시점에 모습을 설정할 수 있는듯

댓글 없음:

댓글 쓰기