Layout 개조하기

서두

앞선 글들에서 태그 시스템을 구축하고, 댓글 시스템을 연동해 보았다. 그러나 여전히 불편했던 점은, 매 페이지마다 해당 컴포넌트 태그들을 위아래로 삽입해줘야 한다는 것이다.

그래서 이번 글에서는 VuePress 심화과정이 될 수도 있는 Layout 개조 작업을 해보기로 한다.

Custom Layout 준비

Custom Themes | VuePress를 보면, Layout을 오버라이딩 하기 위해서는 아래 위치의 Layout.vue 파일을 작성하라고 되어있다.




 

.
└─ .vuepress
   └─ theme
      └─ Layout.vue
1
2
3
4

또는 CustomLayout.vue 처럼 컴포넌트를 작성하고 페이지 상단 frontmatters에 지정하라고 되어있다. 어쨌든 가이드대로 테스트 삼아 작성해보면...

<template>
  <div class="theme-container">
    <Content />
  </div>
</template>
1
2
3
4
5

실망스럽게도 브라우저 화면에 본문만 나오고 상단 헤더나 좌측 네비게이션바 등이 모두 사라진다. 완전히 커스터마이징 하라는 뜻이었던 것이다. 이런... 정신 차리고 다시 가이드를 잘 읽어보자.

아래쪽을 잘 읽어보면, 기본 테마를 기반으로 개조하려면 eject해서 theme 폴더를 복사해 넣으라고 한다. 난 그렇게 하진 않고, vuepress 프로젝트 소스가 있어서 거기서 찾아보니...





 


vuepress.git
└─ lib
   └─ default-theme
      ├─ ...
      ├─ Layout.vue
      └─ ...
1
2
3
4
5
6

찾았다. Layout.vue 파일을 열어보면 해당 폴더의 다른 파일들도 참조하므로 이 폴더를 통째로 복사하면 되겠다.

vuepress.git/lib/default-theme/ ==복사==> my-site/docs/.vuepress/theme/
1

개조하기

Layout.vue 파일을 분석해보니, 내가 개조해야할 부분은 Page.vue 였다. 실제 본문에 해당하는 곳...

Content 컴포넌트를 찾아서 내가 원하는 대로 앞뒤로 컴포넌트를 추가하였다.



 

 
 


<!-- docs/.vuepress/theme/Page.vue -->
...
    <TagLinks class="custom-component tag-links top" />
    <Content :custom="false"/>
    <TagLinks class="custom-component tag-links bottom" />
    <Disqus class="custom-component disqus bottom" />
...
1
2
3
4
5
6
7

클래스를 지정한 이유는, 아래 설명하겠지만 기본 삽입으로는 위치가 조금 안맞았기 때문이다.

스타일 지정을 위해 파일 아래쪽으로가서 이처럼 지정해 주었다.

 
















<style lang="stylus">
...
.custom-component
  @extend $wrapper
  padding-top 1rem
  padding-bottom 1rem
  overflow auto

.custom-component.top
  margin-top 5rem
  margin-bottom -4rem
...
@media (max-width: $MQMobile)
  .custom-component.tag-links
    margin-left 1rem
    margin-right 1rem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

그런데 Vue에서 css 문법에 stylus를 지원했나? VuePress 소스를 뒤져보니 기본은 아니고 Vue Loader에 추가 설정을 해서 쓴 것이었다.

Vue Loader 사이트를 가보니 많이 쓰이는 sass/scss, less도 지원이 되더라. 사이트를 참고하자. Using Pre-Processors | Vue Loader

결론

VuePress 구조를 분석하는 데에 시간이 소요된 것이지, 단순히 본문의 위아래로 삽입만 하면 되기 때문에 적용은 생각보다 어렵지는 않다.

다만 Layout 개조가 된 것이기 때문에, VuePress 버전이 업데이트 될 때마다 default-theme 폴더가 변경되었는지 확인해서 내 사이트 소스에도 적용해주어야 하겠다.

참, 그리고 이번 적용으로 인해 기존 페이지들에 넣어둔 <TagLinks />, <Disqus />는 모두 제거해야 했다. 안그러면 두개씩 중복해서 나올테니까.

최종 수정: 2018-12-6 04:27:04