답변:
나는 전에 Jade를 사용했습니다. Jade의 좋은 점은 구문이 짧아서 더 빠르게 입력 할 수 있다는 것입니다. block
옥에 복잡한 HTML 코드를 처리 할 때 나에게 많은 도움이 될 수있는 매우 강력하다.
반면에 Jade에서는 간단한 if 조건을 기반으로 DIV에 클래스를 추가하는 것과 같은 간단한 작업을 수행하기가 어렵습니다. 이런 걸 넣어야 해요
- if (isAdmin)
div.admin.user
- else
div.user
Jade는 또한 코드를 매우 혼란스럽게 만드는 태그와 변수를 구분하지 않습니다 (적어도 저에게는)
a(href='/user/' + user.id)= user.name
Jade는 또한 디자이너에게 친숙하지 않습니다. 제 디자이너 친구들은 종종 저에게 HTML과 CSS를 제공합니다 (최근에는 LESS로 전환했지만 여전히 HTML을 사용하고 싶습니다). 따라서 제가 Jade를 사용한다면 HTML을 Jade로 변환해야합니다. 또한 Jade에서도 들여 쓰기를 사용해야하므로 HTML 구조가 복잡해지면 코드가 끔찍해 보일 것입니다 (특히 테이블). 가끔은 내가 어떤 레벨인지조차 몰라
table
thead
tr
td
a
img
tr
td
tbody
tr
td
최근에 저는 EJS로 전환했고 지금까지 만족합니다. 순수한 HTML에 매우 가깝고 내가 사용하고있는 프런트 엔드 템플릿 엔진 (Underscore 템플릿)과 동일한 구문을 사용합니다. EJS로 모든 것이 더 쉽다고 말해야합니다. 디자이너 친구로부터 HTML 템플릿을받을 때 모든 변환을 수행 할 필요가 없습니다. 내가해야 할 일은 동적 부분을 ExpressJS에서 전달 된 변수로 바꾸는 것입니다. Jade를 사용할 때 나를 미치게 만드는 것은 EJS에서 해결됩니다.
<div class="<%= isAdmin? 'admin': '' %> user"></div>
그리고 EJS가 무엇인지 알 수 있습니다.
<a href="/user/<%= user.id %>"><%= user.name %></a>
Jade의 짧은 구문을 놓친 경우 (나와 같은) Zen-Coding과 EJS를 결합하여 일반적으로 진행 속도를 높일 수 있습니다. 성능에 대해서는 차이가 보이지 않습니다.
그러나 EJS는 Jade만큼 강력하지 않으며 기본적으로 블록이 없습니다 (이 사람은 EJS https://github.com/RandomEtc/ejs-locals에 대한 블록 기능을 구현했습니다 )
그래서 당신을 편안하게 만드는 것을 선택하는 것은 전적으로 당신에게 달려 있습니다. 하지만 저와 같은 프런트 엔드에 다른 템플릿 엔진을 사용하려는 경우 양쪽에 동일한 것을 사용하는 것이 좋습니다.
2013 년 12 월 16 일 업데이트 : 최근에 저는 EJS에서 Swig로 전환했습니다 (Python 세계에서 Jinja2와 유사한 개념을 가지고 있음). 주된 이유는의 도움으로도 EJS에 블록이 없기 때문입니다 ejs-locals
. Swig는 또한 템플릿에 일반 HTML을 사용하고 있으며 EJS에는없는 필터 및 태그와 같이 템플릿 엔진에 있어야하는 멋진 기능을 많이 사용합니다.
Jade
1 ~ 2 년 전에 해봤어요 . 아마도 지금은 좋아지고있을 것입니다. 그러나 내 첫 번째 요점을 다시 평가하면 그 문제를 해결하기가 쉽지 않을 것입니다.