본문 바로가기

Programming/Javascript

자바스크립트 정적사이트 생성기 11ty (eleventy 일레븐티) 시작하기

반응형

정적사이트 생성기가 여러개다보니 이것저것 시도해봅니다. 그중에 이번엔 11ty라는 정적사이트 생성기에 대해 알아보겠습니다. 사용법이 매우 쉽습니다.

 

[ 목차 ]

     

    1. 설치

    프로젝트로 쓸 폴더를 생성 후 11ty를 깔아줍니다. (기본적으로 Node는 깔려있어야 합니다.)

    npm init -y
    npm install @11ty/eleventy --save-dev

     

    2. 샘플 파일 생성

    2가지 파일을 생성해야합니다. 리눅스라면 아래의 명령어로 생성이 가능한데, 윈도우 환경이면 직접 두 파일을 만듭니다.

    # index.html
    echo '<!doctype html><title>Page title</title><p>Hi</p>' > index.html
    #README.md
    echo '# Page header' > README.md

     

    3. 서버 실행

    npx @11ty/eleventy --serve
    
    or
    
    npx eleventy --serve

    이렇게만 작성하고 실행해도 index.html을 확인할 수 있습니다. 다른 방법으로는 기존의 방식대로 package.json에 script를 작성해서 사용해도 됩니다.

    {
      "scripts":{
        "dev":"eleventy --serve",
        "build":"eleventy"
      },
      "devDependencies": {
        "@11ty/eleventy": "^2.0.1"
      }
    }

     

    4. post 작성

    기초적인 사용법을 알아볼 겸 이제부터 프로젝트에 조금씩 살을 붙이도록 하겠습니다. 오늘 구성할 프로젝트 구조는 아래와 같습니다. 

    우선 샘플 포스트를 아래와 같이 작성합니다.

    # post1.md
    
    ---
    title: Post Title
    ---
    asdfxvzxcv

     

    # post2.md
    
    ---
    title: My second post
    ---
    zxcvgdfg2343

     

    5. 레이아웃 파일 생성

    /_includes/layout.html파일을 생성합니다. 이 레이아웃으로 모든 md파일의 title과 content를 표시할 예정입니다.

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <header>
        <h1>{{ title | default: "My Blog" }}</h1>
      </header>
      <main>
        {{ content }}
      </main>
    </body>
    </html>

     

    그리고 /posts/posts.json파일을 아래와 같이 작성합니다.

    {
      "layout": "layout.html",
      "tags": "post"
    }

    layout은 layout.html파일을 이용하겠다는 뜻이고, post라는 태그가 들어있는 파일들의 리스트를 사용하겠다는 의미입니다.

     

    또한 index.html파일은 layout을 이용해 표시할 예정이므로 아무 내용 없이 layout만 지정합니다.

    <!-- index.html -->
    ---
    layout: layout.html
    ---

     

    이렇게 작성하고 아래의 url에서 잘 표시되는지 확인해 봅시다.

    [http://localhost:8080/posts/post1/]

     

    [http://localhost:8080/posts/post2/]

    레이아웃이 잘 적용되었죠?

     

    6. 포스트 리스트

    마지막으로 메인화면에 포스트 목록을 보여주도록 하겠습니다. 이때 태그로 지정했던 post를 이용해서 리스트를 가져옵니다. index.html을 아래와 같이 수정해줍니다.

    <!-- index.html -->
    ---
    layout: layout.html
    ---
    
    {% for post in collections.post %}
    <h2><a href="{{ post.url }}">{{ post.data.title}}</a></h2>
    <p>{{ post.content }}</p>
    {% endfor %}

     


    한번 사용해본 바로는, 이 기능만 있어도 될만큼 엄청 쉽네요. 나머진 CSS로 꾸미기만 해도 될 것 같습니다. 엄청 빠르고 쉬운 11ty. 한번 사용해볼만 한 것 같습니다. 

    반응형