Jade和EJS,它们各自的优缺点是什么,各自的设计目的是什么?

any other express-compatible template engines个是好的吗?为什么?

推荐答案

我以前用过玉.Jade的优点是,你的语法更短,这意味着你可以更快地打字.Jade中的block非常强大,在处理复杂的HTML代码时,它可以帮助我很多.

另一方面,在Jade中很难做一些简单的事情,比如根据简单的if条件向DIV中添加类.我需要这样的东西

- if (isAdmin)
  div.admin.user
- else
  div.user

Jade也没有区分标签和变量,这使得代码非常混乱(至少对我来说)

a(href='/user/' + user.id)= user.name

翡翠也不利于设计师.我的设计师朋友经常给我HTML和CSS(他们最近改用了HTML,但仍然想使用HTML),因此,如果我使用Jade,我需要将HTML转换为Jade.同样在Jade中,我们需要使用缩进,所以如果HTML struct 变得复杂,代码看起来会很糟糕(尤其是表).有时候,我甚至不知道自己处于什么水平

table
  thead
    tr
      td
        a
          img
    tr
      td
  tbody
    tr
      td

最近,我换了EJS,到目前为止我很满意.它非常接近纯HTML,使用与我使用的前端模板引擎(下划线模板)相同的语法.我必须说,有了EJS,一切都变得容易了.当我从我的设计师朋友那里收到HTML模板时,我不必做所有的转换.我所要做的就是用ExpressJS传递的变量替换动态部分.在EJS中解决了使用Jade时让我发疯的问题

<div class="<%= isAdmin? 'admin': '' %> user"></div>

我知道EJS是什么

<a href="/user/<%= user.id %>"><%= user.name %></a>

如果你错过了Jade(像我一样)的简短语法,你可以结合Zen编码和EJS,这可以帮助你总体上加快进度.关于表现,我看不出有什么不同

然而,EJS没有Jade强大,默认情况下它没有块(这家伙为EJS https://github.com/RandomEtc/ejs-locals实现了块功能)

所以, Select 让你感到舒服的东西完全取决于你.但是,如果你打算像我一样在前端使用另一个模板引擎,那么最好在双方使用相同的东西

2013年12月16日更新:

Node.js相关问答推荐

为什么我的表单数据在我的POST请求中作为应用程序/json发送,为什么它返回错误请求错误?

Mongoose查询-如何根据当前查找ID获取其他集合并将其插入到当前查找中?

在Nest.Js中,如何发送带有表单数据的正文请求并应用正文请求验证.附加的文件是可选的

如何在mongodb集合中设置数据限制?

JsonwebToken过期后如何注销和清除cookie?

如何从mongoose 对象内嵌套的数组中提取数组元素?

dayjs的isSameOrAfter方法未按预期工作

Docker node_modules 文件夹上的 React 应用程序不可用

每个数组值在 mongodb 中查找一个文档

如何防止 Chrome 通过 Selenium 崩溃?

级联定时器和Jest 的异步功能

React Native:执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade 时发生故障

Express.js cookie setter 的 Domain 属性:如何与 *多个 * 域共享 cookie?

带有事件网格的 Azure 函数在没有 ngrok 的情况下在本地运行

FirebaseCloudMessaging : PlatformException (PlatformException(null-error, Host platform returned null value for non-null return value., null, null))

即使部署成功,也不会触发 Firebase 函数来填充 Firestore 集合.为什么?

如何从 github 编译第三方扩展?

try 运行迁移时的 Typeorm:缺少必需的参数:dataSource

从 zip 文件在 AWS 中创建 lambda 函数

Node.js - 使用异步库 - 带有对象的 async.foreach