Package Exports
- ejs-loader
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ejs-loader) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ejs-loader for webpack
EJS (Underscore/LoDash Templates) loader for webpack. Uses lodash template function to compile templates.
If you are looking for the loader which uses EJS templating engine, there is ejs-compiled-loader
Installation
npm install ejs-loader
Usage
var template = require("ejs!./file.ejs");
// => returns the template function compiled with undesrcore (lodash) templating engine.
// And then use it somewhere in your code
template(data) // Pass object with dataYou also should provide a global _ variable with the lodash/underscore runtime. You can do it with the following webpack plugin: https://github.com/webpack/docs/wiki/list-of-plugins#provideplugin
plugins: [
new webpack.ProvidePlugin({
_: "underscore"
})
]Options
Underscore/Lodash options can be passed in using the querystring or adding an esjLoader options block to your configuration.
Config example with Webpack 4+
module.exports = {
module: {
rules: [
{
test: /\.ejs$/,
loader: 'ejs-loader',
options: {
variable: 'data',
interpolate : '\\{\\{(.+?)\\}\\}',
evaluate : '\\[\\[(.+?)\\]\\]'
}
}
]
}
};Config example using a querystring (deprecated):
module.exports = {
module: {
loaders: [
{ test: /\.ejs$/, loader: 'ejs-loader?variable=data' },
]
}
};is equivalent to
var template = _.template('<%= template %>', { variable : 'data' });module.exports = {
module: {
loaders: [
{
test: /\.ejs$/,
loader: 'ejs-loader',
query: {
variable: 'data',
interpolate : '\\{\\{(.+?)\\}\\}',
evaluate : '\\[\\[(.+?)\\]\\]'
}
},
]
}
};is equivalent to
var template = _.template('<%= template %>', { variable: 'data', interpolate : '\\{\\{(.+?)\\}\\}', evaluate : '\\[\\[(.+?)\\]\\]' });Config example using the ejsLoader config block (deprecated):
module.exports = {
module: {
loaders: [
{ test: /\.ejs$/, loader: 'ejs-loader' }
]
},
ejsLoader : {
variable : 'data',
interpolate : /\{\{(.+?)\}\}/g,
evaluate : /\[\[(.+?)\]\]/g
}
};Export as ES Module
ECMAScript Module mode can be utilized to leverage Webpack 4's code splitting/lazy loading and to gain the benefits of tree shaking. This can be used by setting
exportAsESM to true in the loader options.
Config example with Webpack 4+
module.exports = {
module: {
rules: [
{
test: /\.ejs$/,
loader: 'ejs-loader',
options: {
variable: 'data',
exportAsESM: true
}
}
]
}
};The variable option is required to compile EJS templates into ES compatible modules. If the variable option is not provided as a loader or query option, an Error will be thrown throw. Please see https://github.com/lodash/lodash/issues/3709#issuecomment-375898111 for additional details.
Including nested templates
Lodash template function does not provide include method of ejs module. To include other templates, passing template functions as parameters does the job. For example:
index.js:
var mainTemplate = require('ejs!./main.ejs');
var hyperlinkTemplate = require('ejs!./hyperlink.ejs');
var renderedHtml = mainTemplate({ hyperlink: hyperlinkTemplate });main.ejs:
<h1><%= hyperlink({ name: 'Example', url: 'http://example.com' }) %></h1>hyperlink.ejs:
<a href="<%= url %>"><%= name %></a>As a result, renderedHtml becomes a string <h1><a href="http://example.com">Example</a></h1>.
Release History
- 0.3.5 - Fix dependency vulnerabilities.
- 0.3.3 - Fix dependency vulnerabilities.
- 0.3.0 - Allow passing template options via
ejsLoaderor via loader'squery - 0.2.1 - Add ability to pass compiller options
- 0.1.0 - Initial release