mejs v0.9.1
mejs
Moduled and Embedded JavaScript templates, run in node.js and all browsers.
Features
- Run in node.js and all browsers
- Custom delimiters (e.g., use '' instead of '<% %>')
- Full support for
include - Full support for
import(Moduled) - Support
layoutin server side - Support express, koa, toa ...
Tags
<%: 'Scriptlet' tag, for control-flow, no output<%_: 'Whitespace Slurping' Scriptlet tag, strips all whitespace before it<%=: Outputs the value into the template (escaped)<%-: Outputs the unescaped value into the template<%#: Comment tag, no execution, no output<%%: Outputs a literal '<%'%%>: Outputs a literal '%>'%>: Plain ending tag-%>: Trim-mode ('newline slurp') tag, trims following newline_%>: 'Whitespace Slurping' ending tag, removes all whitespace after it
Implementations:
Demo
Installation
npm install mejsAPI
const mejsCompile = require('mejs')mejsCompile(patternOrMejsfile, options) => Mejs Class
Compile ejs templates to a Mejs Class.
patternOrMejsfile: Glob pattern to read template files. Ormejsfile object.options.glob: Glob optionsoptions.base: Everything before a glob (same as tplName) starts.options.delimiter: Character to use with angle brackets for open/close, default is%.options.rmWhitespace: Remove all safe-to-remove whitespace, including leading and trailing whitespace in compiling. It also enables a safer version of-%>line slurping for all scriptlet tags (it does not strip new lines of tags in the middle of a line).options.rmComment: Remove comment before compiling (/<!--([\s\S]*?)-->/g).options.rmLinefeed: Remove linefeed and trailing whitespace before compiling (/\n+[\s]*/g).
const Mejs = mejsCompile('views/**/*.html') // options.base == 'views/'mejsCompile.initMejs(pattern, options) => mejs object
mejs object have renderEx method that support layout, it is useful in server side.
pattern:patternis same as above.options:optionsis same as above, and haveoptions.locals,options.layoutandoptions.sandboxapply for Mejs class.
mejsCompile.initView(pattern, options) => View class
It is implemented for express. arguments is same as mejsCompile.initMejs.
const app = express()
app.set('view', mejs.initView('views/**/*.ejs', {
layout: 'layout',
locals: app.locals
}))
//... render with layout
res.render('index', {user: req.user})
//... disable layout for 'login' view
res.render('login', {layout: false})mejsCompile.precompile(files, options) => mejs file object
Precompile ejs templates to a file object, then you can write it to a JS file.
files: Template files array, the file in array must havepathandcontents.options:optionsis same as above. but one more:options.mini: Precompile a minimum templates module, it is not a Mejs class, should be imported to Mejs class byMejs.import
const mejsSource = mejsCompile.precompile([{
path: 'index.html',
contents: 'index content...'
}, {
path: 'layout.html',
contents: 'layout content...'
}, {
path: 'lib/index',
contents: 'lib index content...'
}
], {base: 'views'})mejsCompile.precompileFromGlob(pattern, options) => mejs file object
Precompile ejs teamplates to a file object, then you can write it to a JS file.
pattern: glob pattern.options:optionsis same as above.
const mejsSource = mejsCompile.precompileFromGlob('views/**/*.js', {base: 'views'})mejsCompile.Template(text, options)
Ejs template engine.
mejsCompile.File(contents, options)
mejs file Class. It is similar to vinyl, AKA gulp file
new Mejs(locals) => mejs object
locals: global locals object, default is{}.
// add config, moment and node-i18n to global locals
const mejs = new Mejs({
config: {
host: 'www.mejs.com',
apiHost: 'www.mejs.com/api'
},
moment: moment,
locale: function() {
return this.locale
},
__: function() {
return this.__.apply(this, arguments)
}
})Class Method: Mejs.import(templates)
Import templates to global from a templates module.
const Mejs = require('Mejs')
const tplsA = require('tplsA')
const tplsB = require('tplsB')
Mejs.import(tplsA).import(tplsB)mejs.render(tplName, data) => filled view string
Render a template with data
tplName: a full template namedata: data object filled to template
mejs.render('index', userObj)
mejs.render('global/header', headerDate)
//...mejs.import(namespace, mejsX)
import another mejs object object to mejs, then mejs will have the templates that from mejsX.
namespace: namespace stringmejsX: mejs object for import
mejs.import('common', mejsA)mejs.add(tplName, tplFn)
Add a template function to current mejs.
mejs.get(tplName)
Get a template function from current mejs.
mejs.remove(tplName)
Remove a template function from current mejs.
mejs.resolve(from, to)
Resolve template path.
mejs.escape(string)
escape function for templates function. You can overwrite it.
7 years ago
8 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago