Socket
Socket
Sign inDemoInstall

ejs

Package Overview
Dependencies
0
Maintainers
2
Versions
75
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    ejs

Embedded JavaScript templates


Version published
Weekly downloads
15M
increased by1.21%
Maintainers
2
Install size
84.6 kB
Created
Weekly downloads
 

Package description

What is ejs?

EJS, or Embedded JavaScript templating, is a templating language that lets you generate HTML markup with plain JavaScript. It is primarily used for server-side rendering of web pages, allowing developers to create HTML templates with dynamic content.

What are ejs's main functionalities?

Interpolation

EJS allows interpolation of variables into HTML. The above code will output the value of `user.name` into the template.

<%= user.name %>

Conditionals

You can use standard JavaScript conditionals to conditionally output HTML. This code checks if `user.isAdmin` is true and outputs a paragraph if it is.

<% if (user.isAdmin) { %> <p>Admin</p> <% } %>

Loops

EJS supports JavaScript loops to iterate over arrays. This code will output each `user.name` in a list item.

<% users.forEach(function(user) { %> <li><%= user.name %></li> <% }); %>

Includes

EJS allows inclusion of other templates, which is useful for reusing common parts of your website like headers and footers. This code includes the 'user/show' template and passes the `user` object to it.

<%- include('user/show', {user: user}); %>

Custom Delimiters

EJS allows you to define custom delimiters for your templates, which can be useful if you need to use '<%' or '%>' in your HTML. This code uses '%#' as a custom delimiter.

<%# users.forEach(function(user) { %> <li><%= user.name %></li> <%# }); %>

Other packages similar to ejs

Readme

Source

EJS

Embedded JavaScript templates

Build Status Developing Dependencies

Installation

$ npm install ejs

Features

  • Control flow with <% %>
  • Escaped output with <%= %>
  • Unescaped raw output with <%- %>
  • Trim-mode ('newline slurping') with -%> ending tag
  • Custom delimiters (e.g., use '' instead of '<% %>')
  • Includes
  • Client-side support
  • Static caching of intermediate JavaScript
  • Static caching of templates
  • Complies with the Express view system

Example

<% if (user) { %>
  <h2><%= user.name %></h2>
<% } %>

Usage

var template = ejs.compile(str, options);
template(data);
// => Rendered HTML string

ejs.render(str, data, options);
// => Rendered HTML string

You can also use the shortcut ejs.render(dataAndOptions); where you pass everything in a single object. In that case, you'll end up with local variables for all the passed options.

Options

  • cache Compiled functions are cached, requires filename
  • filename Used by cache to key caches, and for includes
  • context Function execution context
  • compileDebug When false no debug instrumentation is compiled
  • client Returns standalone compiled function
  • delimiter Character to use with angle brackets for open/close
  • debug Output generated function body
  • _with Whether or not to use with() {} constructs. If false then the locals will be stored in the locals object.

Tags

  • <% 'Scriptlet' tag, for control-flow, no output
  • <%= Outputs the value into the template (HTML escaped)
  • <%- Outputs the unescaped value into the template
  • <%# Comment tag, no execution, no output
  • <%% Outputs a literal '<%'
  • %> Plain ending tag
  • -%> Trim-mode ('newline slurp') tag, trims following newline

Includes

Includes are relative to the template with the include call. (This requires the 'filename' option.) For example if you have "./views/users.ejs" and "./views/user/show.ejs" you would use <%- include('user/show'); %>.

You'll likely want to use the raw output tag (<%-) with your include to avoid double-escaping the HTML output.

<ul>
  <% users.forEach(function(user){ %>
    <%- include('user/show', {user: user}); %>
  <% }); %>
</ul>

Includes are inserted at runtime, so you can use variables for the path in the include call (for example <%- include(somePath); %>). Variables in your top-level data object are available to all your includes, but local variables need to be passed down.

NOTE: Include preprocessor directives (<% include user/show %>) are still supported.

Custom delimiters

Custom delimiters can be applied on a per-template basis, or globally:

var ejs = require('ejs'),
    users = ['geddy', 'neil', 'alex'];

// Just one template
ejs.render('<?= users.join(" | "); ?>', {users: users}, {delimiter: '?'});
// => 'geddy | neil | alex'

// Or globally
ejs.delimiter = '$';
ejs.render('<$= users.join(" | "); $>', {users: users});
// => 'geddy | neil | alex'

Layouts

EJS does not specifically support blocks, but layouts can be implemented by including headers and footers, like so:

<%- include('header'); -%>
<h1>
  Title
</h1>
<p>
  My page
</p>
<%- include('footer'); -%>

Client-side support

Go to the Latest Release, download ./ejs.js or ./ejs.min.js.

Include one of these on your page, and ejs.render(str).

There are a number of implementations of EJS:

License

Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)


EJS Embedded JavaScript templates copyright 2112 mde@fleegix.org.

Keywords

FAQs

Last updated on 21 Jan 2015

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc