hexo icarus 테마 node.js (node:8164) Warning

Warning 발생 원인

icarus로 테마를 변경하던 도중 발견한 Warning 입니다.
이게 뭘까

페이지를 부를 때마다 생기는 여러줄의 Warning은 운영자로 하여금 정신을 나가버리게 만드는 요소 중 하나라고 생각합니다.

원인

node.js 버전을 16.1.0 버전으로 설치한 것이 원인 이였습니다. 더 정확하게는 node.js의 의존성이 걸린 shell.js의 버전이 0.7.x 이면서 node.js의 버전이 14.x 이상일 때 호환성 문제가 생겨 발생하는 것입니다.

해결

해결은 shell.js의 버전을 변경하거나 node.js의 버전을 변경하는 방법입니다. shell.js는 hexo에서 사용하는 것 같으니 nvm을 사용해 node.js의 버전을 변경해 사용하는 환경으로 구축해 보도록 하겠습니다.

개발 환경에 nvm 도입

이곳에서 nvm-setup 파일을 받아줍니다. 이후 압축을 풀고 설치합니다.

이미 node.js가 설치 되어있다면 원래 설치된 버전을 nvm이 관리하도록 추가합니다
nvm 설치

nvm 사용 명령어

nvm 설치 확인

cmd
1
nvm version

필요한 node.js 버전 설치

cmd
1
nvm install v.13.5.0

설치된 node.js 버전 확인

cmd
1
nvm ls

다른 node.js 버전 사용

cmd
1
nvm use 13.5.0

마치며

이로써 원하는 버전의 node.js를 쓸 수 있게 되었습니다. 웹 개발엔 16.1.0 버전을 사용하고 블로그를 작성할 땐 13.5.0 버전을 사용하니 Warning도 뜨지 않으니 속이 후련하군요

hexo icarus 테마로 변경하기

한동안 바쁘다는 핑계로 블로그에 포스팅을 하지 않던 사람이 왠일로 블로그를 다시 잡게 되었다. 스승님 같은 분께서 블로그는 해두면 그것이 자산이 된다고 했으니 조금이라도 해보는 것이 낫지 않나 해서 다시 시작해본다.


새로 시작하는 마음으로 테마를 바꿔보도록 하자.

들어가기 전에

icarus 테마 다운로드

cmd
1
npm install -S hexo-theme-icarus

테마 적용

_config.yml
1
2
3
...
theme: icarus
...

변경 확인

cmd
1
hexo server

icarus 설정

가독성과 다크모드 적용을 위해 변경, 적용 방법은 링크에서 파일을 다운받고 theme/icarus에 붙여넣기로 적용 끝

한글 폰트 설정

나눔스퀘어라운드, 넥슨메이플스토리체 CDN import

themes/icarus/source/css/defualt.styl
1
2
@import url('https://cdn.rawgit.com/innks/NanumSquareRound/master/nanumsquareround.css');
@import url('https://webfontworld.github.io/NexonMaplestory/NexonMaplestory.css');

폰트 적용

themes/icarus/include/style/base.styl
1
2
// $family-sans-serif ?= Ubuntu, Roboto, 'Open Sans', 'Microsoft YaHei', sans-serif
$family-sans-serif ?= 'NexonMaplestory', "nanumsquareround", sans-serif

profile 변경

코드 삭제

themes/icarus/layout/widget/profile.jsx
1
2
3
{followLink ? <div class="level">
<a class="level-item button is-primary is-rounded" href={followLink} target="_blank" rel="noopener">{followTitle}</a>
</div> : null}

prifile 사진 라운드 설정

themes/icarus/layout/widget/profile.jsx
1
2
3
<figure class="image mx-auto mb-2">
<img style={{'border-radius': '20px'}} class={'avatar' + (avatarRounded ? ' is-rounded' : '')} src={avatar} alt={author} />
</figure>

article 스타일 변경

포스트 제목 스타일 변경

themes/icarus/include/style/article.styl
1
2
3
4
5
&.article
.title
font-size: 2.2em
font-weight: 700
letter-spacing: -1.4px;

포스트 내용 스타일 변경

themes/icarus/include/style/article.styl
1
2
3
4
5
6
.content
font-size: $article-font-size
font-weight: 350
line-height: 1.9em;
letter-spacing: -0.3px;
margin-top: 20px;

head 1, 2 스타일 변경

themes/icarus/include/style/article.styl
1
2
3
4
5
6
7
8
9
h1
font-size: 1.95em
font-weight: 600
margin-top: 50px;

h2
font-size: 1.5em
font-weight: 500
margin-top: 35px;

일단 기본적인 설정은 끝냈고 만약 사용하다가 불편하거나 고쳐야 될 부분은 나중에 고치도록 하자

Hexo 블로그에 Google Analytics를 적용해 보자

다른 사람은 모르겠지만 저는 예전부터 궁금했습니다. SNS에 사진이나 글을 올렸을 때 도대체 누가 볼까, 몇명이나 읽을까라고 말이죠. 저는 지금도 궁급합니다. 도대체 누가 이런 글을 읽으러 오는 것일까 하고 말이죠. 그래서 Google Analytics를 준비했습니다. 이걸 블로그에 도입하면 누가 얼마나 이 블로그에 오는 것인지, 어떤 포스트에 가장 많은 관심을 갖는지 알 수 있겠죠.

Prologue

일단 블로그에 매달아 놓으려면 이게 무엇에 쓰는 것인지는 알아야 매달지 말지를 결정할 수 있습니다. 쓸모없는거 매달아놓고 나중에 치우것은 정말 귀찮습니다. 그런고로 잘 알아보고 적절한 것을 갔다 쓰면 훗날 있을 귀찮음을 하나 줄일 수 있습니다.

그래서 Google Analytics(이하 GA)가 무엇인가? 하면 사용자들의 나이, 성별, 페이지에 머물던 시간, 행동 패턴들을 이용하고 조합해 유의미한 통계들을 출력해주는 서비스입니다. 신규 방문의 비율이 많은지, 재방문이 많은지, 접속자는 모바일이 많은지, 데스크탑이 많은지 등등 꽤 유의미한 정보를 얻을 수 있습니다.(과연 그 정보가 블로그를 하는데 꼭 필요한가? 기술블로그라 잘 안볼텐데?)

사실 작은 기술 블로그를 운영하는 저는 그다지 필요 없는 서비스입니다. 어차피 검색해서 들어올 사람들은 한정적이고 요즘 사람들은 긴 글을 잘 읽지 않기 때문입니다. 그렇지만 사용하려는 이유는 안해보는 것 보단 낫기 때문입니다. GA는 웹 뿐만 아니라 모바일 앱에도 적용을 할 수 있습니다. 모바일 앱이나 다른 애플리케이션에 적용하기 전에 한번 사용해본다는 생각으로 작업했습니다.

Google Analytics Setting

가입

서론이 길었으니 바로 시작하겠습니다. 가입은 이곳(Google Analytics)에서 진행합니다. 새로운 계정을 만드는 것은 언제나 설레는 일입니다. 특히 게임 계정을 만들땐 특히나 더욱 설레곤 합니다.
1.Google Analytics Sign up

계정 설정

게임으로 치면 닉네임에 해당하는 부분입니다. 닉네임을 잘 정해두면 두고두고 이름으로 고민하지 안하도 됩니다. 여러분들도 이름짓기가 얼마나 힘든 일인지 알고 있습니다 변수명, 함수명 짓기가 얼마나 힘든지.
2.Google Analytics Account Naming

속성 설정

어디에 사용할 지 라벨을 붙이는 과정입니다. 여기서도 이름을 붙어야 합니다. 꼭 필요한 과정이긴 하지만 도대체 이름을 얼마나 붙여야 하는지… 이름은 기술 블로그에 적용하기 위해 만들었으니 Blog라는 이름을 사용했습니다. 통화는 $가 멋저 보여서 변경하지 않았습니다.
3.Google Analytics Attribution Labeling

비즈니스 정보

비즈니스를 하진 않지만 항목은 성실하게 작성했습니다. 비즈니스를 하지 않아도 수익은 얻고싶은 그런 마음
4.Google Analytics business info

약관

약관은 매우 중요하니 꼭 읽어보라는 말을 듣곤합니다. 하지만 이걸 다 읽는 사람이 과연 몇이나 될까? 라는 의문을 줄곧 가지고 있습니다. 용어 정리와 사용료, 서비스, 계정 보안, 라이선스 등에 대한 정보를 가지고 있다. 그리고 가장 중요한 면책과 배상에 대한항목이 있습니다. 면책과 배상은 약관에 빠질 수 없는 감초 같은 것이라고 들었습니다.
5.Google Analytics Terms

데이터 스트림 설정

데이터 스트림 설정은 ①설정 > ②데이터 스트림 > ③웹 을 선택합니다. 블로그(웹)에 연동할 것이니 웹을 선택합니다.
6.Google Analytics Datastream Setting

스트림 설정

측정 ID 값은 블로그 설정파일(_config.yml)에 등록해야합니다. 그러니 복사해 둡시다. 중요한 정보는 너굴맨이 처리했으니 안심하라구!
7.Google Analytics Stream Setting

블로그에 적용하기

설정파일 변경

./themes/aria/_config.yml
1
2
# Google Analytics Tracking ID
google_analytics: [Tracking ID]

해당 부분에 측정 ID를 붙여넣습니다.

배포하기

1
# hexo g -d

확인

GA의 연동은 약 24시간 정도 걸린다고 합니다.
8.Check
연동이 잘 되었습니다. 역시나 저 말고는 아무도 찾아오지 않습니다.

hexo 블로그에 댓글창(disqus)을 만들어보자

&nbsp;사회 생활 경험이 많은건 아니지만 해보면서 몇가지 느낀점이 있습니다. 그 중 하나는 입을 다물면 반은 간다입니다. 하지만 왜 댓글창을 만들어서 굳이 말을 더 하려는걸까요? 어째서인지는 모르겠지만 없으면 허전하니 만들어보도록 하겠습니다.

Prologue

어떤 plugin을 사용할까?

&nbsp;우선 hexo가 어떤 댓글창을 지원하는지부터 확인해봐야 합니다. 지원하는 것이 없다면 처음부터 만들어야겠지만 그럴일은 없습니다.

Aria에서 사용 가능한 댓글창은 다음과 같습니다.

  • disqus
  • commentjs
  • valine

disqus를 사용했습니다. 가장 쉽게 추가할 수 있고 SNS login기능도 있고 깔끔하기 때문입니다.

Add Comment

&nbsp;이번 작업은 disqus의 계정을 만들고 shortname을 만들어 aria_config에 추가하기만 하면됩니다.

getstart
disqus page 입니다. GET STARTED를 눌러 시작합시다.

installmysite
I want to install Disqus on my site를 선택합니다.

CreateSite
site의 이름과 주제, 언어를 설정해줍니다. 한국어는 지원하지 않으니 영어를 선택했습니다.

SelectPlan
저는 돈도 없고 굳이 내가면서 쓸 이유는 없기때문에 Basic을 선택했습니다.

SelectPlatform
I don’t see my platform listed, install manually with Universal Code를 선택해줍니다.

config
스크롤을 내려서 Configure를 눌러줍시다.

SiteConfig
Website Name과 URL을 적어줍시다.

ClickSiteConfig
톱니바퀴 모양의 Configure your site’s community settings를 클릭합니다.

ShortName,Fonts
여기서 _config.yml에 추가해줄 shortname을 확인합니다. 그리고 Appearance부분에 Typeface를 변경해주면 댓글창의 Font를 변경할 수 있습니다. 만약 댓글창에 궁서체가 나온다면 Auto이외의 글꼴을 선택하면 됩니다.

./themes/aria/_config.yml
1
2
3
4
# `comment.commentjs.type`: Choose between `github` and `oschina`.
comment:
enable: true
disqus_shortname: colorlion

config 파일에 disqus_shortname을 추가합니다.

comment
잘 적용됐습니다.

Epilogue

&nbsp;이번 포스트에선 별 다른 어려움 없이 진행할 수 있었습니다. 처음 적용할 때 댓글의 폰트가 궁서체로 적용되어 당황했지만 site config에서 변경할 수 있었습니다. 이것으로 오늘의 교훈은 설명서를 잘 읽어보자 였습니다 감사합니다.

aria 테마 code block 변경하기

**라이벌(Rival)**은 동등 혹은 그 이상의 실력은 가진 경쟁자를 의미한다 적수라고도 한다.

위키백과

&nbsp;라이벌이라는 존재는 존재 자체만으로 동기부여가 됩니다. 이번 포스트에서는 블로그를 시작하면서 생긴 라이벌 code block을 다뤄보도록 하겠습니다.

Prologue

Code Block

Before Patch

&nbsp;aria 테마를 설치하고 처음 code block을 보고 이야 이거 물건이다라는 생각이 들었습니다. 뭐랄까 감성을 자극했다고 해야되나요? 쨌든 잘 다듬어서 써야겠다 라고 생각했습니다. 하지만 포스트 몇개를 올리게 되고, 블로그의 세팅을 변경하다보니 깨닫게 된 사실이 있었습니다.
code block
초기 code block은 왼쪽 상단의 복사 버튼, 동작은 하지 않지만 우측 상단의 최소화, 최대화, 닫기 버튼이 있고, 작업 표시줄 부분엔 code라는 문자열이 고정되어 있습니다.

Another dead pixel

&nbsp;그렇다면 무엇이 문제일까요. 눈치가 빠르신 분이라면 아시겠지만 code block의 제목 부분이 code로 고정되어있습니다. 한가지 더 문제점이 있는데 이는 Mark Down 파일 작성 시 code block에 파일명을 넣어서 작성하는 경우 입니다.
code block with title
오늘 수고해주실 코드블럭입니다.

A wasted of Time

First step

사태 파악

&nbsp;변경을 위해선 먼저 저 제목 부분이 어떤 tag를 달고 있는지 확인해야 합니다. chorme 개발자 도구를 활용해 봅시다.
code block tag1
code block tag2
확인해 보니 file name 부분은 figcaption tag를 사용하고 있고, title bar 부분은 div.code-titlebar tag를 사용하고 있습니다.

modify

&nbsp;첫 삽질은 title bar에 code를 지우는 것이였습니다. 먼저 원본 코드를 보도록 하겠습니다.

./themes/aria/layout/_layout.njk
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
<script defer type="text/javascript" src="{{ url_for("js/index.js") }}"></script>
<script type="text/javascript">
$(document).ready(function () {
var cb = null;
var els = $(".post figure.highlight");
if (els.length) {
// Enabled Hexo highlight line number.
$(els).each(function (i, e) {
// $(e).before("<button class=\"copy button\">{{ __("clipboard.copy") }}</button>");
$(e).before([
"<div class=\"code-titlebar\">",
"<div class=\"titlebar-left\">",
"<button class=\"copy\" aria-label=\"{{ __("clipboard.copy") }}\"><i class=\"far fa-copy\"></i></button>",
"</div>",
"<div class=\"titlebar-center\">",
"{{ __("") }}", //"{{ __("code") }}",
"</div>",
"<div class=\"titlebar-right\">",
"<button class=\"button-dot dot-minimize\" aria-label=\"Decoration\"></button>",
"<button class=\"button-dot dot-maximize\" aria-label=\"Decoration\"></button>",
"<button class=\"button-dot dot-close\" aria-label=\"Decoration\"></button>",
"</div>",
"</div>"
].join(""));
});

16번째 줄을 보면 “code”문자열을 지우면 제목 표시줄의 code를 지울 수 있습니다.
code block notitle1
제목 표시줄이 깔끔해졌습니다.
code block notitle2
하지만 file name을 사용한다면 디자인이 구려집니다. 그렇다고 제목을 포기할 수는 없습니다. 저는 code block에 제목을 다는 법을 알게 되버렸으니까요.


Second step

사태파악

&nbsp;두번째로 생각한 내용은 제목 표시줄에 표시할 수 없다면 file name css의 디자인을 code block에 맞추는 것이었습니다. 그리고 제목 표시줄 왼쪽에 copy 기능이 file name을 적으면 copy 기능이 제대로 동작하지 않는 버그도 발견했습니다. 아쉽게도 이번 step에서는 해당 버그를 고치진 못했고 버그가 있다는 것만 확인했습니다.

modify

&nbsp;변경해야될 figcaption tag의 css파일을 찾을 수 없었기에 index.styl 파일에 추가했습니다.

./themes/aria/source/css/index.styl
1
2
3
4
5
6
7
8
9
10
11
figcaption{
color: $color-code-titlebar-font;
background: #4f5258;
border-radius: $corner-radius;
padding: 0.25em;
padding-left: 1em;
padding-right: 1em;
position: relative;
display: inline;
text-align: center;
}

code block step2
file name에 css가 적용되었습니다.

&nbsp;한동안 figcaption에 css를 적용해 code block을 사용했습니다. 아무래도 front end 부분은 깊게 다뤄본 적이 없어서 지금 수준으론 문제를 해결할 수 없다고 판단해 공부를 더 했습니다.

The end

&nbsp;시간이 날때마다 aria의 코드를 보고 나름 구조를 파악하다 보니 DOM의 사용법과 JS의 사용법 등을 실험하다보니 copy버그와 titebar를 수정 할 수 있었습니다.

Copy

&nbsp;code block에 file name을 사용한다면 copy 기능이 왜 동작하지 않는지 알아야 했습니다. 수정 전의 원본 코드를 확인해보겠습니다.

./themes/aria/layout/_layout.njk
1
2
3
4
5
6
cb = new ClipboardJS("button.copy", {
"target": function (trigger) {
// Get target element by DOM API.
return trigger.parentNode.parentNode.nextElementSibling.firstChild.firstChild.firstChild.lastChild.firstChild.firstChild;
}
});

해당 코드는 _layout.njk 파일의 일부입니다. copy button을 click하면 return에 해당하는 object를 clip board에 copy하는 기능을 가지고 있습니다. 해당 코드가 실행되면 file name이 없는 경우에는 정상적으로 copy하지만 file name이 있는 경우에는 아무런 동작을 하지 않습니다.

&nbsp;file name이 있어도 code를 return 할 수 있도록 return 부분을 수정해 보도록 하겠습니다.

./themes/aria/layout/_layout.njk
1
2
3
4
5
6
7
cb = new ClipboardJS("button.copy", {
"target": function (trigger) {
// Get target element by DOM cd API.
return trigger.parentNode.parentNode.nextElementSibling.lastChild.lastChild.lastChild.lastChild;
//return trigger.parentNode.parentNode.nextElementSibling.firstChild.firstChild.firstChild.lastChild.firstChild.firstChild;
}
});

file name을 사용하더라도 code만 clip board에 복사 해 올 수 있습니다.


Title bar

&nbsp;titlebar를 수정하면서 했던 삽질 중에 가장 기억에 남는 것은 code block모든 text를 읽어와서 조건문을 사용해 file name만 추출하는 방법이었습니다. 물론 code block 마다 조건문이 동작했기 때문에 포스팅에 code block이 많거나 code block의 text가 많다면 페이지 로딩 시간이 3~5초 길게는 10초 이상도 걸렸던 적이 있습니다.
&nbsp;copy 기능의 버그를 수정하면서 했던 몇가지 실험을 성공해 title bar에도 적용할 수 있었습니다. 아래는 원본 코드의 일부분입니다.

./themes/aria/layout/_layout.njk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$(document).ready(function () {
var cb = null;
var els = $(".post figure.highlight");
if (els.length) {
// Enabled Hexo highlight line number.
$(els).each(function (i, e) {
// $(e).before("<button class=\"copy button\">{{ __("clipboard.copy") }}</button>");
$(e).before([
"<div class=\"code-titlebar\">",
"<div class=\"titlebar-left\">",
"<button class=\"copy\" aria-label=\"{{ __("clipboard.copy") }}\"><i class=\"far fa-copy\"></i></button>",
"</div>",
"<div class=\"titlebar-center\">",
"{{ __("code") }}",
"</div>",
"<div class=\"titlebar-right\">",
"<button class=\"button-dot dot-minimize\" aria-label=\"Decoration\"></button>",
"<button class=\"button-dot dot-maximize\" aria-label=\"Decoration\"></button>",
"<button class=\"button-dot dot-close\" aria-label=\"Decoration\"></button>",
"</div>",
"</div>"
].join(""));
});

$(e).before에서 ecode block의 내용을 담고 있는 object라는 걸을 유추 할 수 있습니다. 그렇다면 e를 어떻게 지지고 볶으면 원하는 file name을 얻어 낼 수 있지 않을까 해서 조져봤습니다.

./themes/aria/layout/_layout.njk
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
$(document).ready(function () {
var cb = null;
var els = $(".post figure.highlight");
if (els.length) {
// Enabled Hexo highlight line number.
$(els).each(function (i, e) {
var codeTitle = "";
var codeContents = e.firstChild.innerText;
// codeContents - 1 or file name
if (codeContents[0] == 1){
codeTitle = "CMD";
}else{
codeTitle = codeContents
}
// $(e).before("<button class=\"copy button\">{{ __("clipboard.copy") }}</button>");
$(e).before([
"<div class=\"code-titlebar\">",
"<div class=\"titlebar-left\">",
"<button class=\"copy\" aria-label=\"{{ __("clipboard.copy") }}\"><i class=\"far fa-copy\"></i></button>",
"</div>",
"<div class=\"titlebar-center\">",
codeTitle,
"</div>",
"<div class=\"titlebar-right\">",
"<button class=\"button-dot dot-minimize\" aria-label=\"Decoration\"></button>",
"<button class=\"button-dot dot-maximize\" aria-label=\"Decoration\"></button>",
"<button class=\"button-dot dot-close\" aria-label=\"Decoration\"></button>",
"</div>",
"</div>"
].join(""));
});

추가한 코드에 대해 간략히 설명하면 다음과 같습니다

  • codeTitle - code title이 저장될 변수
  • codeContents - DOM을 저장할 변수
  • if 문 - file name이 없다면 codeTitle에 “CMD”를 저장, file name이 없다면 codeTitlecodeContents(file name)을 저장

&nbsp;css를 적용했던 figcaption tag가 안보이도록 변경하겠습니다. 주의 사항으로는 visibility: hidden 속성을 주면 DOM에도 포함이 안되기 때문에 title bar에도 표시되지 않습니다. css를 다음과 같이 변경합니다.

./themes/aria/source/css/index.styl
1
2
3
figcaption {
font-size: 0;
}

약간 편법 같지만 원하는 디자인으로 나와줄 것입니다.

codeblock end

원하던 모양으로 code block이 완성되었습니다. 상당히 마음에 듭니다.

Epilogue

&nbsp;블로그 초기부터 꽤나 고치고 싶었던 부분이였는데 원하는 디자인으로 변경할 수 있어 상당히 뿌듯합니다.

hexo blog 테마 변경하기 3

&nbsp;모니터를 샀을 때 가장 신경쓰이는 것은 불량화소 입니다. 불량화소가 10개가 넘어가면 아 불량품 받았네 하고 별 생각 없이 교환을 받거나 반품 받겠지만 불량화소가 1개, 2개 있다면 정말 난감해집니다. 괜히 신경쓰이고 그렇다고 이거 하나 때문에 바꿔야되나 싶고 내 뽑기운이 이정도 밖에 안되는건가? 하며 자괴감 들고 괴롭기도 합니다. 하지만 블로그는 다릅니다. 마음에 안드는 게 있다면 바꿀 수 있기 때문입니다. 이번 포스트에서는 불량화소 같은 것들을 바꿔보도록 하겠습니다.

Prologue

뭐가 그렇게 마음에 들지 않는걸까

???: 언니 저 맘에 안들죠?
!!!: 눈을 왜 그렇게 떠?

튜닝을 할꺼면 어중간하게 해서는 안됩니다. 마음에 들 때 까지 해야 꽤 오랜시간 신경 안쓰고 사용할 수 있기 때문입니다. 조금 쓰다가 이거 맘에 안든다고 바꿔버리고, 저거 맘에 안든다고 바꿔버리면 정작 본 작업에 집중 할 수 없게 되니까요.

이번에 바꿀 것들은 다음과 같습니다.

  • Archive, Catetories, Tags 페이지의 문구
  • 줄간격
  • Scroll 두께

aria theme의 구조

&nbsp;분해는 조립의 역순이라는 말의 뜻은 분해를 해봐야 다시 조립을 할 수 있다는 의미입니다. 그렇다고 하나하나 코드를 들여다 보기엔 시간도 별로 없고 귀찮기도 하고 그래서 간단하게 훑고 지나가겠습니다.

structure
1
2
3
4
5
6
7
8
9
10
. # ./theme/aria/
├── languages # blog 언어 파일
├── layout # Nunjucks 파일
├── scripts # tag에 사용할 정규 표현식 js 파일
├── source # blog 디자인의 대부분을 담당하는 폴더
| ├── css # css 파일
| └── fonts # font 파일
| └── images # logo, background, avatar 이미지파일
| └── js # javascript 파일
├── some files

.njk 파일도 있으면서 css파일도 있고, scripts 폴더도 있으면서 js 폴더도 있는 신기한 구조지만 뭐 어쩌겠습니까. 제가 만든것이 아니기 때문에 이것만으로도 감지덕지 하면서 고쳐 써야죠.

&nbsp;손댄 부분은 languages, layout, ./source/css이 세가지 부분 입니다. 간단한 부분부터 시작하겠으나 이번 경우엔 특히나 삽질을 많이 했던 부분입니다. 했던 삽질을 같이 첨부하고 싶지만 포스트가 너무 길어질것 같으니 다음 포스트로 작성하겠습니다.

Change

Archive, Categories, Tags 문구 변경

Whats the matter?

Archives, Categories, Tags
저는 깔끔한게 좋으니 치워버리겠습니다.

modify

./themes/aria/languages/en.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
postcount:
none: '' #You have no post, write now!
one: '' #You have %d post, keep on!
more: '' #You have %d posts!

tagcount:
none: '' #You have no tag, create now!
one: '' #You have %d tag, keep on!
more: '' #You have %d tags!

categorycount:
none: '' #You have no category, create now!
one: '' #You have %d category, keep on!
more: '' #You have %d categories!

after remove line
좋습니다. 하지만 아직도 지워야 할 것들이 있습니다. 지워보도록 합시다.

./themes/aria/layout/archive.njk
1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="archive" class="archive page">
<!--<h1 class="page-title">{{ __("archive") }}</h1>
<h2 class="page-counter">
{% if site.posts.length > 1 %}
{{ _p("postcount.more", site.posts.length) }}
{% elif site.posts.length === 1 %}
{{ _p("postcount.one", site.posts.length) }}
{% else %}
{{ __("postcount.none") }}
{% endif %}
</h2> -->
(...skip...)
</div>

./themes/aria/layout/categories.njk
1
2
3
<header class="post-header">
<!--<h1 class="post-title" itemprop="name headline">{{ __(page.title) }</h1>-->
</header>

./themes/aria/layout/tags.njk
1
2
3
<header class="post-header">
<!-- <h1 class="post-title" itemprop="name headline">{{ __(page.title) }}</h1> -->
</header>

&nbsp;총 3개의 파일을 변경했습니다. 사실 njk파일들을 변경한다면 en.yml 파일은 변경하지 않아도 되긴 하지만 njk파일en.yml을 읽은 뒤 페이지를 렌더링 하기 때문에 혹시나 몰라서 변경해 두었습니다.
after_njk
깔끔하니 보기 좋습니다. 파일 여러개를 수정해서 복잡한 것 같지만 주석 처리만 했기 때문에 어렵지 않습니다.


줄간격

Whats the matter?

&nbsp;원래가 중국어 폰트를 사용하는 블로그라 그런지 줄간격이 좁았습니다. 특히 이 문제는 plan textinline block을 같이 사용할 때 발생하는 문제점이였습니다. 그리고 조절하는 김에 h1~h5p, li tag의 간격도 조절했습니다.
line
바지 지퍼 올리다가 찝힌 기분입니다.

modify

&nbsp;아프니 바로 바꿔보도록 하겠습니다.

./themes/aria/source/scc/post.styl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.post-main {
h1{
line-height:1em;
margin-block-start: 1.5em;
margin-block-end: 0.2em;
}
h2{
line-height:1em;
margin-block-start: 0.6em;
margin-block-end: 0.5em;
}
h3{
line-height:1em;
margin-block-start: 0.6em;
margin-block-end: 0.2em;
}
p{
line-height:1.5em;
margin-block-start: 0.3em;
margin-block-end: 0.7em;
}
(...skip...)
}

post.styl.post-main부분에 각 태그의 스타일을 추가해주면 됩니다.

./themes/aria/source/scc/index.styl
1
2
3
4
li{
margin-block-start: 0.2em;
margin-block-end: 0.2em;
}

index.styl는 다른 tag와 겹치지 않는 선에서 마음에 드는 부분에 추가하면 됩니다.

after_line


Scroll 두께 조절

Whats the matter?

&nbsp; 기존 스크롤은 상당히 얇아서 마우스로 클릭하기가 힘들었습니다. 그래서 늘렸습니다.

modify

./themes/aria/source/scc/index.styl
1
2
3
4
::-webkit-scrollbar {
width: 0.8em;
height: 0.4em;
}

해당 부분의 widht의 값을 조정하는 것으로 scroll bar의 두께를 조절할 수 있습니다. 마지막으로 code block까지 변경했으나 포스트의 길이 관계 상 다음 포스트로 작성하겠습니다.

hexo blog 테마 변경하기 2

마누라와 자식만 빼고 다 바꿔라

삼성전자 회장 - 이건희

&nbsp;저는 마누라는 커녕 여자친구도 없으니 전부 바꿔보도록 하겠습니다.

Prologue

Aria Blog Sample

aria blog sample
&nbsp;sample은 aria theme을 만든 Alynx Zhou의 blog입니다. 취향은 존중해야 하니 변경할 부분들만 다시 확인하도록 하겠습니다.


변경할 부분

change parts

  • Header 설정(blog 이름, Aria 로고 지우기)
  • 메뉴바 설정
  • 사이드바 설정
  • Footer 설정(copy right 변경, github Pages 링크 변경)
  • Fonts, Code Highlighting

Change Configuration file

Header Setting

Blog name

&nbsp;일단 블로그의 이름을 먼저 바꿔줘야 합니다. 기껏 만들어놓고 대문에 남의 이름 써있으면 기분이 묘해집니다. 해당 설정은 hexo의 _config.yml파일을 수정합니다.

./blog_root/_config.yml
1
2
3
4
5
6
7
8
# Site
title: ColorLion's IT Blog
subtitle: EZ bloging
description:
keywords: ColorLion
author: ColorLion
language: en
timezone: Asia/Seoul

바꾸는 김에 timezone, language 등을 변경했습니다. 나머지는 적어둘만한 것이 생각나지 않아 생략했습니다.

&nbsp;aria theme을 사용하긴 하지만 로고는 사용하기 애매한 부분이 있어 없애버렸습니다. 로고는 ./blog_root/theme/aria/_config.ymllogo 부분을 주석 처리 해주는 것으로 없앨 수 있습니다.

./blog_root/theme/aria/_config.yml
1
#logo: images/logo.png

header
블로그의 header가 깔끔해졌습니다.


&nbsp;메뉴 부분에서는 home, archives, tags, categories 이 4가지만 사용할 것입니다.

_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
menu:
- name: home
link: /
icon: <i class="fas fa-home"></i>
- name: archives
link: archives/
icon: <i class="fas fa-archive"></i>
- name: categories
link: categories/
icon: <i class="fas fa-th-list"></i>
- name: tags
link: tags/
icon: <i class="fas fa-tags"></i>
# - name: about
# link: about/
# icon: <i class="fas fa-user-edit"></i>

설정을 변경한 menu입니다. 4가지 항목을 사용했고, about 부분은 나중에 유명해 진다면 사용하는 걸로 합니다.쓰지 않겠다는 말입니다.

Create Tags page

&nbsp;homearchives는 블로그 theme 적용 시점부터 바로 사용할 수 있지만 categoriestags는 따로 만들어 줘야 합니다. 먼저 tags 페이지를 만들어 봅시다.

1
$ hexo new page "tags"

생성된 tags 페이지의 index.md파일을 다음과 같이 변경합니다.

./blog_root/source/tags/index.md
1
2
3
4
5
---
title: All tags
type: "tags"
#date: 2020-03-17 00:00:54
---

tags
tag페이지가 정상적으로 동작하는 것을 확인할 수 있습니다.

Create Categories page

categories 페이지도 만들어 봅시다.

1
$ hexo new page "categories"

생성된 categories 페이지의 index.md파일을 다음과 같이 변경합니다.

./blog_root/source/categories/index.md
1
2
3
4
5
---
title: Categories
type: "categories"
#date: 2020-03-17 00:10:41
---

categories
categories 페이지 역시 잘 동작하는군요

만약 제대로 동작하지 않는다면 위의 _config.yml의 설정중 link 부분을 확인해보시길 바랍니다. 해당 경로는 /blog_root/themes/aria/가 아닌 /blog_root/source/ 에 존재하는 디렉토리로 지정됩니다.


&nbsp;Sidebar는 없애기로 결정했습니다. 올려둘만한 프로필 사진도 없고, 링크를 걸어둘만한 사이트도 없기 때문입니다.

./blog_root/theme/aria/_config.yml
1
2
# `left`, `right`, `false`
sidebar: false

sidebar
초라하게 있는 것 보단 없는게 더 깔끔해 보입니다. 미니멀리즘이 이런건가?라고 생각해보는 시간이었습니다.


&nbsp;github 페이지 링크를 변경하는 작업입니다.

./blog_root/theme/aria/_config.yml
1
2
# Custom info in footer.
custom_info: github<i class="fab fa-github-alt"></i><a href="https://github.com/ColorLion" target="_blank">GitHub Pages</a>

완성입니다.


Fonts/Code Highlighting Setting

Change Fonts

&nbsp;기본 font를 사용한다면 영어는 적용되지만 한글이 적용이 안되기 때문에 변경해주도록 하겠습니다.

./blog_root/theme/aria/_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
# Select all your webfont in a CDN like Google Fonts, and then copy `href` property in the `<link>` tag, like `link: //fonts.googleapis.com/css?family=Lato|Roboto+Condensed|Skranji|Ubuntu|Ubuntu+Mono`.
# Then set different fonts to different parts here.
custom_font:
enable: true
link:
- //cdn.jsdelivr.net/gh/moonspam/NanumSquare@1.0/nanumsquare.css
- //cdn.rawgit.com/innks/NanumSquareRound/master/nanumsquareround.css
- //cdn.jsdelivr.net/gh/joungkyun/font-d2coding/d2coding.css
all: 'NanumSquare'
title: 'NanumSquare'
subtitle: 'NanumSquare'
main: 'NanumSquareRound'
code: 'D2Coding'

개인적으로 naver의 폰트를 정말 좋아합니다. 가독성도 좋고 둥글 둥글 하니 귀엽기도 한 것같고 그렇습니다.

Change Code Highlighting

&nbsp;저는 code highlignting은 무조건 atom-one-dark theme을 사용합니다. vscode도 그렇고 theme를 변경할 수 있다면 대부분 atom-one-dark를 사용합니다.

./blog_root/theme/aria/_config.yml
1
2
# Available: atom-one-dark | atom-one-light | solarized-dark | solarized-light
highlight: atom-one-dark

aria theme을 사용하게 된 가장 큰 이유중 하나가 atom-one-dark를 사용할 수 있고, 가장 잘 어울렸기 때문입니다.

hexo blog 테마 변경하기 1

튜닝의 끝은 순정이다

튜닝의 튜닝을 거듭한 사람 - 순정파(곽철용)

라는 말이 있습니다. 이 말은 튜닝을 해봐야 순정의 좋은점을 알게 된다는 의미가 아닐까라는 생각이 들어 블로그의 테마를 변경해봤습니다. 이번 post에서는 테마를 바꾸면서 하게된 여러가지 삽질에 대해 적어보도록 하겠습니다.

Prologue

어떤 Theme을 적용해야 할까

기존 테마

default_theme
&nbsp;이전 post를 보고 오셨다면 hexo의 default theme가 어떻게 생겼는지 어느정도 확인하셨을겁니다. 깔끔하니 좋은 듯 하지만 썩 마음에 들진 않으니 바꿔보도록 하겠습니다.

테마를 고르는 기준

&nbsp;무언가를 바꾸기 위해서는 기존의 것과 다른 차별점이 있어야 합니다. 기껏 좋아보여서 바꿨는데 이전 것과 똑같으면 뭐하러 움직였나 하면서 괜히 기분만 나쁘기 때문입니다.

theme 선택 시 중요하게 했던 것은 크게 3가지 입니다.

  • 디자인이 너무 과하지 않을 것
  • 영어 문서가 있을 것
  • 필요한 기능(댓글, google analytics, code block의 highlighting 지원 등)

다음과 같은 기준으로 hexo themes에서 후보군을 정했습니다.

  • Aria
  • Alpha Dust
  • Archer

&nbsp;결론부터 말하자면 Aria로 변경했습니다. 영어를 지원하고 가장 무난했으며 무엇보다 code block의 디자인이 정말 마음에 들었습니다. 솔직히 code block의 디자인만 보고 결정했습니다.

Alpha Dust
&nbsp;Alpha Dust는 특유의 중2병스러운 감성과 깔끔함이 마음에 들었지만 blog에 적용했을 때 code block high lighting이 정상 동작하지 않는 치명적인 단점이 있었습니다. 또한 최근 업데이트도 없는 것으로 보아 포기하게 되었습니다.

Archer
&nbsp;Archer는 code block과 Theme 자체는 깔끔했으나 제가 원하는 깔끔함이 아니였습니다. 본인 옷을 이렇게 신경 썼으면 알바하러 나가면서 츄리닝을 입고 나가진 않았을 것입니다.

Change Theme

&nbsp;본격적으로 theme를 변경해 보도록 하겠습니다. 과정은 간단하며, theme에 필요한 패키지 설치, blog의 _conifg.yml 변경 순으로 진행됩니다.

Install Packages

필수

1
$ npm install --save hexo-renderer-njucks hexo-renderer-stylus

&nbsp;JavaScript template인 nunjucks와 CSS pre-processor인 stylus를 설치하는 명령어 입니다. Aria는 해당 두 패키지를 사용해 랜더링 되기 때문에 필수적으로 설치해야 합니다.

선택

1
$ npm install --save hexo-generator-search hexo-generator-feed

&nbsp;해당 패키지들은 블로그 내에서 검색과 RSS feed를 만들어주는 패키지입니다. 저는 굳이 필요 없다고 생각했기 때문에 설치하지 않았습니다.


Install Themes

1
$ git clone https://github.com/AlynxZhou/hexo-theme-aria themes/aria

&nbsp;자신이 설정한 blog root에서 theme를 다운받습니다. 특이사항은 없습니다. 사실 post의 길이를 위해서 상당히 많은 헛소리를 했습니다.


Modify Configuration

blog’s _config.yml

./_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
# theme change
theme: aria

# language
language: en

# highlighting setting
highlight:
enable: true
hljs: true
line_number: true
auto_detect: true
tab_replace:

&nbsp;theme를 변경하면서 기본적인 설정도 변경했습니다. 언어는 설정하지 않으면 default language인 중국어로 표시될 것이고, highlighting 설정을 하지않으면 이 theme을 쓰는 이유가 없어지게 되니 설정하도록 합시다. 그 밖에 다른 설정을 변경하시는 분들은 hexo documenation을 참조하시기 바랍니다.

create aria’s _config.yml

1
$ cp ./theme/aria/_config.yml.example ./theme/aria/_config.yml

&nbsp;aria의 configuration file을 만들어 줍니다. aria의 설정을 변경하고자 할 때 사용하는 파일입니다.


참조

포스팅을 위한 hexo 사용법

blog를 꾸미기 위해서는 먼저 post를 작성하는 방법을 알아야 합니다. 작성보다 더 중요한 것은 삭제와 변경입니다. 나름 공부를 하고 post를 썼지만 해당 글이 잘못된 정보를 전파하는 똥글이 되버린다면 아 내가 이런 똥글을 썼다고? 인 상황이 발생할 수 있으니까요.

Posting

Writing

1
hexo new [layout] <title>

post, draft, page를 생성하기 위한 명령어입니다. 저는 post를 쓸 때 한번에 쓰는 법이 없기 때문에 draft로 작성 후 post로 publish합니다. draft에 대한 설명은 아래를 참고해 주세요.

Modify the Post

1
2
# source/_posts에서 .md파일 변경 후
hexo g -d

post의 내용을 변경하는 방법은 매우 간단합니다. 기존에 작성한 post파일을 수정하기만 하면 됩니다. 변경 후 다시 랜더링이 필요합니다.

Delete

1
2
# source/_posts에서 .md파일 삭제 후
hexo g -d

post를 삭제하는 방법은 변경 방법과 동일합니다. source/_posts 폴더에 삭제하고자 하는 post 파일(.md)을 삭제한 후 deploy 하면 됩니다.

layout

Hexo에는 Layout이라는 개념이 존재합니다. 각 Layout의 이름과 저장되는 위치는 다음과 같습니다.

  • post(게시글) : source/_posts
  • page(페이지) : source/
  • draft(초안) : source/_draft

저는 주로 postdraft를 사용해 글을 작성합니다. page는 제가 post를 만들면서 한번도 사용해 보진 않았습니다. 앞으로도 사용할 일은 없을 것 같습니다.

1
default_layout = post   # (page/draft)

default layout은 post입니다. default layout을 변경하고자 할 땐 _config.ymldefault_layout 수정하면 됩니다.

Draft

1
hexo new draft <title>

draft는 post를 작성할 때 임시 저장의 개념으로 사용할 수 있습니다. Draft로 작성 한 파일은 랜더링 되지 않습니다. 제가 블로그에 post를 작성할 때 맨 처음 생성하는 파일입니다.

1
hexo g -d --draft

draft도 랜더링 하고자 할 땐 랜더링 시 --draft옵션을 추가 해주면 됩니다.

1
render_drafts = true

_config.ymlrender_drafts 옵션을 true로 설정하면, --draft 옵션 없이 랜더링 해도 draft가 같이 랜더링 됩니다.

1
hexo publish post <title>

작성이 완료된 draft를 post로 변경하는 방법입니다. 이 명령어를 칠 때가 가장 뿌듯합니다.

파일명

post의 제목과 동일하게 작성됩니다. _config.yml파일의 new_post_name 옵션을 변경 해 기본 파일명을 변경할 수 있습니다.

사용할 수 있는 placeholder는 다음과 같습니다

  • :title - post 제목(소문자, 공백은 ‘-‘ 하이픈으로 변경)
  • :year - 연도 생성
  • :month - 월 생성(ex. 04)
  • :i_month - 월 생성(ex. 4)
  • :day - 일 생성(ex. 07)
  • :i_day - 일 생성(ex. 7)

Asset Folder

전역 Asset 폴더

1
![](/images/image.jpg)

source 폴더에 위치해 있으며 image, CSS, JavaScript가 저장되는 폴더입니다.
포스트에서 이미지를 사용하고싶을 땐 /source/image 폴더에 이미지를 넣고 다음과 같이 호출하면 이미지를 사용할 수 있습니다.

Post Asset 폴더

1
post_asset_folder = true

post 단위로 멀티미디어 파일을 관리하고자 할 땐 _config.yml 파일의 post_asset_foldertrue로 설정하면 포스트 생성 시 동일한 이름의 폴더가 생성됩니다. 해당 폴더는 각 포스트의 Asset 폴더로 사용됩니다.
저는 늘어가는 post와 함께 증식해가는 image의 이름을 구분해 저장하는 것은 매우 귀찮을 것 같아 Post Asset 폴더를 사용했습니다.


참조

포스팅을 위한 hexo 사용법

blog를 꾸미기 위해서는 먼저 post를 작성하는 방법을 알아야 합니다. 작성보다 더 중요한 것은 삭제와 변경입니다. 나름 공부를 하고 post를 썼지만 해당 글이 잘못된 정보를 전파하는 똥글이 되버린다면 아 내가 이런 똥글을 썼다고? 인 상황이 발생할 수 있으니까요.

Posting

Writing

1
hexo new [layout] <title>

post, draft, page를 생성하기 위한 명령어입니다. 저는 post를 쓸 때 한번에 쓰는 법이 없기 때문에 draft로 작성 후 post로 publish합니다. draft에 대한 설명은 아래를 참고해 주세요.


Modify the Post

1
2
# source/_posts에서 .md파일 변경 후
hexo g -d

post의 내용을 변경하는 방법은 매우 간단합니다. 기존에 작성한 post파일을 수정하기만 하면 됩니다. 변경 후 다시 랜더링이 필요합니다.


Delete

1
2
# source/_posts에서 .md파일 삭제 후
hexo g -d

post를 삭제하는 방법은 변경 방법과 동일합니다. source/_posts 폴더에 삭제하고자 하는 post 파일(.md)을 삭제한 후 deploy 하면 됩니다.

layout

overview

Hexo에는 Layout이라는 개념이 존재합니다. 각 Layout의 이름과 저장되는 위치는 다음과 같습니다.

  • post(게시글) : source/_posts
  • page(페이지) : source/
  • draft(초안) : source/_draft

저는 주로 postdraft를 사용해 글을 작성합니다. page는 제가 post를 만들면서 한번도 사용해 보진 않았습니다. 앞으로도 사용할 일은 없을 것 같습니다.

1
default_layout = post   # (page/draft)

default layout은 post입니다. default layout을 변경하고자 할 땐 _config.ymldefault_layout 수정하면 됩니다.


Draft

1
hexo new draft <title>

draft는 post를 작성할 때 임시 저장의 개념으로 사용할 수 있습니다. Draft로 작성 한 파일은 랜더링 되지 않습니다. 제가 블로그에 post를 작성할 때 맨 처음 생성하는 파일입니다.

1
hexo g -d --draft

draft도 랜더링 하고자 할 땐 랜더링 시 --draft옵션을 추가 해주면 됩니다.

_config.yml
1
render_drafts = true

_config.ymlrender_drafts 옵션을 true로 설정하면, --draft 옵션 없이 랜더링 해도 draft가 같이 랜더링 됩니다.

1
hexo publish post <title>

작성이 완료된 draft를 post로 변경하는 방법입니다. 이 명령어를 칠 때가 가장 뿌듯합니다.


파일명

post의 제목과 동일하게 작성됩니다. _config.yml파일의 new_post_name 옵션을 변경 해 기본 파일명을 변경할 수 있습니다.

사용할 수 있는 placeholder는 다음과 같습니다

  • :title - post 제목(소문자, 공백은 ‘-‘ 하이픈으로 변경)
  • :year - 연도 생성
  • :month - 월 생성(ex. 04)
  • :i_month - 월 생성(ex. 4)
  • :day - 일 생성(ex. 07)
  • :i_day - 일 생성(ex. 7)

Asset Folder

전역 Asset 폴더

1
![](/images/image.jpg)

source 폴더에 위치해 있으며 image, CSS, JavaScript가 저장되는 폴더입니다.
포스트에서 이미지를 사용하고싶을 땐 /source/image 폴더에 이미지를 넣고 다음과 같이 호출하면 이미지를 사용할 수 있습니다.


Post Asset 폴더

1
post_asset_folder = true

post 단위로 멀티미디어 파일을 관리하고자 할 땐 _config.yml 파일의 post_asset_foldertrue로 설정하면 포스트 생성 시 동일한 이름의 폴더가 생성됩니다. 해당 폴더는 각 포스트의 Asset 폴더로 사용됩니다.
저는 늘어가는 post와 함께 증식해가는 image의 이름을 구분해 저장하는 것은 매우 귀찮을 것 같아 Post Asset 폴더를 사용했습니다.


참조