{"_id":"express3-handlebars","_rev":"204827","name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","dist-tags":{"latest":"0.5.2"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"time":{"modified":"2021-06-03T13:11:22.000Z","created":"2013-01-08T02:00:31.128Z","0.5.2":"2014-08-07T23:47:17.545Z","0.5.1":"2014-08-05T19:23:59.075Z","0.5.0":"2013-07-25T17:30:11.044Z","0.4.1":"2013-04-06T16:46:09.614Z","0.4.0":"2013-03-24T20:42:36.393Z","0.3.3":"2013-03-22T18:04:55.610Z","0.3.2":"2013-02-20T21:50:37.685Z","0.3.1":"2013-02-18T21:10:26.626Z","0.3.0":"2013-02-18T21:01:00.248Z","0.2.3":"2013-02-14T02:48:28.689Z","0.2.2":"2013-02-04T21:53:48.977Z","0.2.1":"2013-02-04T21:45:47.105Z","0.2.0":"2013-02-02T00:06:19.707Z","0.1.2":"2013-01-10T05:25:38.607Z","0.1.1":"2013-01-10T05:15:18.909Z","0.1.0":"2013-01-08T02:00:31.128Z"},"users":{"pav":true,"snize":true,"skipzero":true,"fmm":true,"pierrenel":true,"billpatrianakos":true,"jonyweb":true,"samlin09":true,"tomchao":true,"blakeredwolf":true},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"versions":{"0.5.2":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.5.2","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.2","glob":"3.x","handlebars":"1.x","semver":"2.x"},"devDependencies":{"express":"3.x"},"main":"index.js","directories":{"lib":"./lib"},"gitHead":"71dddc760526e19d294ff93720ccaab9f9ed75e3","_id":"express3-handlebars@0.5.2","scripts":{},"_shasum":"953a8c2f643fdcd4ef1c75f7a1bccd01930ac18c","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"dist":{"shasum":"953a8c2f643fdcd4ef1c75f7a1bccd01930ac18c","size":443858,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.5.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.5.2.tgz"},"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","publish_time":1407455237545,"_cnpm_publish_time":1407455237545,"_hasShrinkwrap":false},"0.5.1":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.5.1","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.2","glob":"3.x","handlebars":"1.x","semver":"2.x"},"devDependencies":{"express":"3.x"},"main":"index.js","directories":{"lib":"./lib"},"gitHead":"24109836558087f4604df2696d8bacf886dc1e0c","_id":"express3-handlebars@0.5.1","scripts":{},"_shasum":"6996801d0d65f79bca05a3266cad2c9b07a91257","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"dist":{"shasum":"6996801d0d65f79bca05a3266cad2c9b07a91257","size":443771,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.5.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.5.1.tgz"},"publish_time":1407266639075,"_cnpm_publish_time":1407266639075,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.5.0":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.5.0","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.2","glob":"3.x","handlebars":"1.x","semver":"2.x"},"devDependencies":{"express":"3.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.5.0","dist":{"shasum":"7f77fef9838cefad967ce18e75fd092fb4c313c2","size":12745,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.5.0.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1374773411044,"_cnpm_publish_time":1374773411044,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.4.1":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.4.1","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.2","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.4.1","dist":{"shasum":"bc8c72fccd48586fcdabb00b6a74a86bf52df48c","size":10566,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.4.1.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1365266769614,"_cnpm_publish_time":1365266769614,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.4.0":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.4.0","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.4.0","dist":{"shasum":"00e13b0853194c4f0148185248bc06322d911ed7","size":10520,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.4.0.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1364157756393,"_cnpm_publish_time":1364157756393,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.3.3":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.3.3","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.3.3","dist":{"shasum":"b5b0913d5e57766c59e198958dee745cfa05a518","size":10246,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.3.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.3.3.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1363975495610,"_cnpm_publish_time":1363975495610,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.3.2":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.3.2","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.3.2","dist":{"shasum":"7ceba6ea06f053e8d058b4cace0494bc1b62b18b","size":10153,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.3.2.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1361397037685,"_cnpm_publish_time":1361397037685,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.3.1":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.3.1","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.3.1","dist":{"shasum":"08603ef3544c9611d156b7f3250914e91b22b273","size":9913,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.3.1.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1361221826626,"_cnpm_publish_time":1361221826626,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.3.0":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.3.0","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.3.0","dist":{"shasum":"7958ea8daa1acba504b9e8ef4b28cb0e3245d119","size":9821,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.3.0.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1361221260248,"_cnpm_publish_time":1361221260248,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.2.3":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.2.3","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x","semver":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.2.3","dist":{"shasum":"19f0a831594b836719c32955af02c1706178ef8d","size":8762,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.2.3.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1360810108689,"_cnpm_publish_time":1360810108689,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.2.2":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.2.2","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.2.2","dist":{"shasum":"bda05718ec1fec4c600ea6dd1bde8362bdc6827c","size":8412,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.2.2.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1360014828977,"_cnpm_publish_time":1360014828977,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.2.1":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.2.1","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.2.1","dist":{"shasum":"57e69701b67b1b0f46f58d46c2ce1ebd1301efca","size":8385,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.2.1.tgz"},"_npmVersion":"1.1.71","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1360014347105,"_cnpm_publish_time":1360014347105,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.2.0":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.2.0","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.2.0","dist":{"shasum":"7d2b474bf75095ebf87ad6a8578cbfe75e38d8b2","size":8075,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.2.0.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1359763579707,"_cnpm_publish_time":1359763579707,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.1.2":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.1.2","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.1.2","dist":{"shasum":"089c26134baa5a4afd5194ffafa3b23bc289a61b","size":7604,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.1.2.tgz"},"_npmVersion":"1.1.69","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1357795538607,"_cnpm_publish_time":1357795538607,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.1.1":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.1.1","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.1.1","dist":{"shasum":"d1fd0fa6c55199c06858ba4dd55956069e709a2b","size":7583,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.1.1.tgz"},"_npmVersion":"1.1.69","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1357794918909,"_cnpm_publish_time":1357794918909,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false},"0.1.0":{"name":"express3-handlebars","description":"A Handlebars view engine for Express which doesn't suck.","version":"0.1.0","homepage":"https://github.com/ericf/express3-handlebars","keywords":["express","express3","handlebars","view","layout","partials"],"repository":{"type":"git","url":"git://github.com/ericf/express3-handlebars.git"},"author":{"name":"Eric Ferraiuolo","email":"eferraiuolo@gmail.com","url":"http://ericf.me/"},"engines":{"node":">=0.8"},"dependencies":{"async":"~0.1","glob":"3.x","handlebars":"1.x"},"main":"index.js","directories":{"lib":"./lib"},"readmeFilename":"README.md","_id":"express3-handlebars@0.1.0","dist":{"shasum":"06d1a71b44ef225c829140196db97f2a8ce6352c","size":5477,"noattachment":false,"key":"/express3-handlebars/-/express3-handlebars-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/express3-handlebars/download/express3-handlebars-0.1.0.tgz"},"_npmVersion":"1.1.69","_npmUser":{"name":"ericf","email":"eferraiuolo@gmail.com"},"maintainers":[{"name":"ericf","email":"eferraiuolo@gmail.com"}],"publish_time":1357610431128,"_cnpm_publish_time":1357610431128,"deprecated":"THIS PACKAGE HAS BEEN RENAMED TO: express-handlebars","_hasShrinkwrap":false}},"readme":"RENAMED TO: `express-handlebars`\n================================\n\n**This package has been renamed to [`express-handlebars`][new-npm], be sure to\nupdate your `package.json` files.**\n\nSee: <https://www.npmjs.org/package/express-handlebars>\n\n[new-npm]: https://www.npmjs.org/package/express-handlebars\n\n----\n\nExpress3 Handlebars\n===================\n\nA [Handlebars][] view engine for [Express][] which doesn't suck.\n\n[![Dependency Status](https://david-dm.org/ericf/express3-handlebars.png)][status]\n\n\n[Express]: https://github.com/visionmedia/express\n[Handlebars]: https://github.com/wycats/handlebars.js\n[status]: https://david-dm.org/ericf/express3-handlebars\n\n\nGoals & Design\n--------------\n\nI created this project out of frustration with the existing Handlebars view\nengines for Express. As of version 3.x, Express got out of the business of being\na generic view engine — this was a great decision — leaving developers to\nimplement the concepts of layouts, partials, and doing file I/O for their\ntemplate engines of choice.\n\n### Goals and Features\n\nAfter building a half-dozen Express apps, I developed requirements and opinions\nabout what a Handlebars view engine should provide and how it should be\nimplemented. The following is that list:\n\n* Add back the concept of \"layout\", which was removed in Express 3.x.\n\n* Add back the concept of \"partials\" via Handlebars' partials mechanism.\n\n* Support a directory of partials; e.g., `{{> foo/bar}}` which exists on the\n  file system at `views/partials/foo/bar.handlebars` by default.\n\n* Smart file system I/O and template caching. When in development, templates are\n  always loaded from disk. In production, raw files and compiled templates are\n  cached, including partials.\n\n* All async and non-blocking. File system I/O is slow and servers should not be\n  blocked from handling requests while reading from disk. I/O queuing is used to\n  avoid doing unnecessary work.\n\n* Ability to expose precompiled templates and partials to the client, enabling\n  template sharing and reuse.\n\n* Ability to use a different Handlebars module/implementation other than the\n  Handlebars npm package.\n\n### Package Design\n\nThis package was designed to work great for both the simple and complex use\ncases. I _intentionally_ made sure the full implementation is exposed and is\neasily overrideable.\n\nThe package exports a function which can be invoked with no arguments or with a\n`config` object and it will return a function (closed over sane defaults) which\ncan be registered with an Express app. It's an engine factory function.\n\nThis exported engine factory has two properties which expose the underlying\nimplementation:\n\n* `ExpressHandlebars()`: The constructor function which holds the internal\n  implementation on its `prototype`. This produces instance objects which store\n  their configuration, `compiled` and `precompiled` templates, and expose an\n  `engine()` function which can be registered with an Express app.\n\n* `create()`: A convenience factory function for creating `ExpressHandlebars`\n  instances.\n\nAn instance-based approach is used so that multiple `ExpressHandlebars`\ninstances can be created with their own configuration, templates, partials, and\nhelpers.\n\n\nInstallation\n------------\n\nInstall using npm:\n\n```shell\n$ npm install express3-handlebars\n```\n\n\nUsage\n-----\n\nThis view engine uses sane defaults that leverage the \"Express-way\" of\nstructuring an app's views. This makes it trivial to use in basic apps:\n\n### Basic Usage\n\n**Directory Structure:**\n\n```\n.\n├── app.js\n└── views\n    ├── home.handlebars\n    └── layouts\n        └── main.handlebars\n\n2 directories, 3 files\n```\n\n**app.js:**\n\nCreates a super simple Express app which shows the basic way to register a\nHandlebars view engine using this package.\n\n```javascript\nvar express = require('express'),\n    exphbs  = require('express3-handlebars'),\n\n    app = express();\n\napp.engine('handlebars', exphbs({defaultLayout: 'main'}));\napp.set('view engine', 'handlebars');\n\napp.get('/', function (req, res) {\n    res.render('home');\n});\n\napp.listen(3000);\n```\n\n**views/layouts/main.handlebars:**\n\nThe main layout is the HTML page wrapper which can be reused for the different\nviews of the app. `{{{body}}}` is used as a placeholder for where the main\ncontent should be rendered.\n\n```html\n<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Example App</title>\n</head>\n<body>\n\n    {{{body}}}\n\n</body>\n</html>\n```\n\n**views/home.handlebars:**\n\nThe content for the app's home view which will be rendered into the layout's\n`{{{body}}}`.\n\n```html\n<h1>Example App: Home</h1>\n```\n\n#### Running the Example\n\nThe above example is bundled in this package's [examples directory][], where\nit can be run by:\n\n```shell\n$ cd examples/basic/ && node app\n```\n\n### Using Instances\n\nAnother way to use this view engine is to create an instance(s) of\n`ExpressHandlebars`, allowing access to the full API:\n\n```javascript\nvar express = require('express'),\n    exphbs  = require('express3-handlebars'),\n\n    app = express(),\n    hbs = exphbs.create({ /* config */ });\n\n// Register `hbs.engine` with the Express app.\napp.engine('handlebars', hbs.engine);\napp.set('view engine', 'handlebars');\n\n// ...still have a reference to `hbs`, on which methods like `loadPartials()`\n// can be called.\n```\n\n**Note:** The [Advanced Usage][] example demonstrates how `ExpressHandlebars`\ninstances can be leveraged.\n\n### Template Caching\n\nThis view engine uses a smart template caching strategy. In development,\ntemplates will always be loaded from disk, i.e., no caching. In production, raw\nfiles and compiled Handlebars templates are aggressively cached.\n\nThe easiest way to control template/view caching is through Express'\n[view cache setting][]:\n\n```javascript\napp.enable('view cache');\n```\n\nExpress enables this setting by default when in production mode, i.e.,\n`process.env.NODE_ENV === \"production\"`.\n\n**Note:** All of the public API methods accept `options.cache`, which gives\ncontrol over caching when calling these methods directly.\n\n### Layouts\n\nA layout is simply a Handlebars template with a `{{{body}}}` placeholder.\nUsually it will be an HTML page wrapper into which views will be rendered.\n\nThis view engine adds back the concept of \"layout\", which was removed in Express\n3.x. It can be configured with a path to the layouts directory, by default it's\nset to `\"views/layouts/\"`.\n\nThere are two ways to set a default layout: configuring the view engine's\n`defaultLayout` property, or setting [Express locals][] `app.locals.layout`.\n\nThe layout into which a view should be rendered can be overridden per-request\nby assigning a different value to the `layout` request local. The following\nwill render the \"home\" view with no layout:\n\n```javascript\napp.get('/', function (req, res, next) {\n    res.render('home', {layout: false});\n});\n```\n\n### Helpers\n\nHelper functions, or \"helpers\" are functions that can be\n[registered with Handlebars][] and can be called within a template. Helpers can\nbe used for transforming output, iterating over data, etc. To keep with the\nspirit of *logic-less* templates, helpers are the place where logic should be\ndefined.\n\nHandlebars ships with some [built-in helpers][], such as: `with`, `if`, `each`,\netc. Most application will need to extend this set of helpers to include\napp-specific logic and transformations. Beyond defining global helpers on\n`Handlebars`, this view engine supports `ExpressHandlebars` instance-level\nhelpers via the `helpers` configuration property, and render-level helpers via\n`options.helpers` when calling the `render()` and `renderView()` methods.\n\nThe following example shows helpers being specified at each level:\n\n**app.js:**\n\nCreates a super simple Express app which shows the basic way to register\n`ExpressHandlebars` instance-level helpers, and override one at the\nrender-level.\n\n```javascript\nvar express = require('express'),\n    exphbs  = require('express3-handlebars'),\n\n    app = express(),\n    hbs;\n\nhbs = exphbs.create({\n    // Specify helpers which are only registered on this instance.\n    helpers: {\n        foo: function () { return 'FOO!'; },\n        bar: function () { return 'BAR!'; }\n    }\n});\n\napp.engine('handlebars', hbs.engine);\napp.set('view engine', 'handlebars');\n\napp.get('/', function (req, res, next) {\n    res.render('home', {\n        showTitle: true,\n\n        // Override `foo` helper only for this rendering.\n        helpers: {\n            foo: function () { return 'foo.'; }\n        }\n    });\n});\n\napp.listen(3000);\n```\n\n**views/home.handlebars:**\n\nThe app's home view which uses helper functions to help render the contents.\n\n```html\n<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Example App - Home</title>\n</head>\n<body>\n\n    <!-- Uses built-in `if` helper. -->\n  {{#if showTitle}}\n    <h1>Home</h1>\n  {{/if}}\n\n    <!-- Calls `foo` helper, overridden at render-level. -->\n    <p>{{foo}}</p>\n\n    <!-- Calls `bar` helper, defined at instance-level. -->\n    <p>{{bar}}</p>\n\n</body>\n</html>\n```\n\n#### More on Helpers\n\nRefer to the [Handlebars website][] for more information on defining helpers:\n\n* [Expression Helpers][]\n* [Block Helpers][]\n\n\n[examples directory]: https://github.com/ericf/express3-handlebars/tree/master/examples\n[view cache setting]: http://expressjs.com/api.html#app-settings\n[Express locals]: http://expressjs.com/api.html#app.locals\n[registered with Handlebars]: https://github.com/wycats/handlebars.js/#registering-helpers\n[built-in helpers]: http://handlebarsjs.com/#builtins\n[Handlebars website]: http://handlebarsjs.com/\n[Expression Helpers]: http://handlebarsjs.com/expressions.html#helpers\n[Block Helpers]: http://handlebarsjs.com/block_helpers.html\n\n\nAPI\n---\n\n### Configuration and Defaults\n\nThere are two main ways to use this package: via its engine factory function, or\ncreating `ExpressHandlebars` instances; both use the same configuration\nproperties and defaults.\n\n```javascript\nvar exphbs = require('express3-handlebars');\n\n// Using the engine factory:\nexphbs({ /* config */ });\n\n// Create an instance:\nexphbs.create({ /* config */ });\n```\n\nThe following is the list of configuration properties and their default values\n(if any):\n\n#### `defaultLayout`\nThe string name or path of a template in the `layoutsDir` to use as the default\nlayout. This is overridden by a `layout` specified in the app or response\n`locals`. **Note:** A falsy value will render without a layout; e.g.,\n`res.render('home', {layout: false});`.\n\n#### `extname=\".handlebars\"`\nThe string name of the file extension used by the templates. This value should\ncorrespond with the `extname` under which this view engine is registered with\nExpress when calling `app.engine()`.\n\nThe following example sets up an Express app to use `.hbs` as the file extension\nfor views:\n\n```javascript\nvar express = require('express'),\n    exphbs  = require('express3-handlebars'),\n\n    app = express();\n\napp.engine('.hbs', exphbs({extname: '.hbs'}));\napp.set('view engine', '.hbs');\n```\n\n**Note:** Setting the app's `\"view engine\"` setting will make that value the\ndefault file extension used for looking up views.\n\n#### `handlebars=require('handlebars')`\nThe Handlebars module/implementation. This allows for the `ExpressHandlebars`\ninstance to use a different Handlebars module/implementation than that provided\nby the Handlebars npm package.\n\n#### `helpers`\nAn object which holds the helper functions used when rendering templates with\nthis `ExpressHandlebars` instance. When rendering a template, a collection of\nhelpers will be generated by merging: `handlebars.helpers` (global), `helpers`\n(instance), and `options.helpers` (render-level). This allows Handlebars'\n`registerHelper()` function to operate as expected, will providing two extra\nlevels over helper overrides.\n\n#### `layoutsDir=\"views/layouts/\"`\nThe string path to the directory where the layout templates reside.\n\n#### `partialsDir=\"views/partials/\"`\nThe string path to the directory where the partials templates reside.\n\n### Properties\n\nThe public API properties are provided via `ExpressHandlebars` instances. In\nadditional to the properties listed in the **Configuration and Defaults**\nsection, the following are additional public properties:\n\n#### `compiled`\nAn object cache which holds compiled Handlebars template functions in the\nformat: `{\"path/to/template\": [Function]}`.\n\n#### `engine`\nA function reference to the `renderView()` method which is bound to `this`\n`ExpressHandlebars` instance. This bound function should be used when\nregistering this view engine with an Express app.\n\n#### `handlebarsVersion`\nThe version number of `handlebars` as a semver. This is unsed internally to\nbranch on certain operations which differ between Handlebars releases.\n\n#### `precompiled`\nAn object cache which holds precompiled Handlebars template strings in the\nformat: `{\"path/to/template\": [String]}`.\n\n### Methods\n\nThe following is the list of public API methods provided via `ExpressHandlebars`\ninstances:\n\n#### `loadPartials(options|callback, [callback])`\n\nRetrieves the partials in the `partialsDir` and passes an object mapping the\npartials in the form `{name: partial}` to the `callback`.\n\nBy default each partial will be a compiled Handlebars template function. Use\n`options.precompiled` to receive the partials as precompiled templates — this is\nuseful for sharing templates with client code.\n\n**Parameters:**\n\n* `[options]`: Optional object containing any of the following properties:\n\n  * `[cache]`: Whether cached templates can be used if they have already been\n    requested. This is recommended for production to avoid unnecessary file I/O.\n\n  * `[precompiled=false]`: Whether precompiled templates should be provided,\n    instead of compiled Handlebars template functions.\n\n* `callback`: Function to call once the partials are retrieved.\n\nThe name of each partial corresponds to its location in `partialsDir`. For\nexample, consider the following directory structure:\n\n```\nviews\n└── partials\n    ├── foo\n    │   └── bar.handlebars\n    └── title.handlebars\n\n2 directories, 2 files\n```\n\n`loadPartials()` would produce the following result:\n\n```javascript\nvar hbs = require('express3-handlebars').create();\n\nhbs.loadPartials(function (err, partials) {\n    console.log(partials);\n    // => { 'foo.bar': [Function],\n    // =>    title: [Function] }\n});\n```\n\n**Note:** The partial name `\"foo.bar\"` would ideally be `\"foo/bar\"`, but this is\nbeing prevented by a [Handlebars bug][]. Once this bug is fixed, a future\nversion will use a \"/\" separator. Templates requiring the partial still use:\n`{{> foo/bar}}`.\n\n#### `loadTemplate(filePath, options|callback, [callback])`\n\nRetrieves the template at the specified `filePath` and passes a compiled\nHandlebars template function to the `callback`.\n\nUse `options.precompiled` to receive a precompiled Handlebars template.\n\n**Parameters:**\n\n* `filePath`: String path to the Handlebars template file.\n\n* `[options]`: Optional object containing any of the following properties:\n\n  * `[cache]`: Whether a cached template can be used if it have already been\n    requested. This is recommended for production to avoid necessary file I/O.\n\n  * `[precompiled=false]`: Whether a precompiled template should be provided,\n    instead of a compiled Handlebars template function.\n\n* `callback`: Function to call once the template is retrieved.\n\n#### `loadTemplates(dirPath, options|callback, [callback])`\n\nRetrieves the all the templates in the specified `dirPath` and passes an object\nmapping the compiled templates in the form `{filename: template}` to the\n`callback`.\n\nUse `options.precompiled` to receive precompiled Handlebars templates — this is\nuseful for sharing templates with client code.\n\n**Parameters:**\n\n* `dirPath`: String path to the directory containing Handlebars template files.\n\n* `[options]`: Optional object containing any of the following properties:\n\n  * `[cache]`: Whether cached templates can be used if it have already been\n    requested. This is recommended for production to avoid necessary file I/O.\n\n  * `[precompiled=false]`: Whether precompiled templates should be provided,\n    instead of a compiled Handlebars template function.\n\n* `callback`: Function to call once the templates are retrieved.\n\n#### `render(filePath, options|callback, [callback])`\n\nRenders the template at the specified `filePath` using this instance's `helpers`\nand partials, and passes the resulting string to the `callback`.\n\nThe `options` will be used both as the context in which the Handlebars template\nis rendered, and to signal this view engine on how it should behave, e.g.,\n`options.cache = false` will load _always_ load the templates from disk.\n\n**Parameters:**\n\n* `filePath`: String path to the Handlebars template file.\n\n* `[options]`: Optional object which will serve as the context in which the\n  Handlebars template is rendered. It may also contain any of the following\n  properties which affect this view engine's behavior:\n\n  * `[cache]`: Whether a cached template can be used if it have already been\n    requested. This is recommended for production to avoid unnecessary file I/O.\n\n  * `[helpers]`: Render-level helpers should be merged with (and will override)\n    instance and global helper functions.\n\n* `callback`: Function to call once the template is retrieved.\n\n#### `renderView(viewPath, options|callback, [callback])`\n\nRenders the template at the specified `viewPath` as the `{{{body}}}` within the\nlayout specified by the `defaultLayout` or `options.layout`. Rendering will use\nthis instance's `helpers` and partials, and passes the resulting string to the\n`callback`.\n\nThis method is called by Express and is the main entry point into this Express\nview engine implementation. It adds the concept of a \"layout\" and delegates\nrendering to the `render()` method.\n\nThe `options` will be used both as the context in which the Handlebars templates\nare rendered, and to signal this view engine on how it should behave, e.g.,\n`options.cache=false` will load _always_ load the templates from disk.\n\n**Parameters:**\n\n* `viewPath`: String path to the Handlebars template file which should serve as\n  the `{{{body}}}` when using a layout.\n\n* `[options]`: Optional object which will serve as the context in which the\n  Handlebars templates are rendered. It may also contain any of the following\n  properties which affect this view engine's behavior:\n\n  * `[cache]`: Whether cached templates can be used if they have already been\n    requested. This is recommended for production to avoid unnecessary file I/O.\n\n  * `[helpers]`: Render-level helpers should be merged with (and will override)\n    instance and global helper functions.\n\n  * `[layout]`: Optional string path to the Handlebars template file to be used\n    as the \"layout\". This overrides any `defaultLayout` value. Passing a falsy\n    value will render with no layout (even if a `defaultLayout` is defined).\n\n* `callback`: Function to call once the template is retrieved.\n\n### Statics\n\nThe following is the list of static API properties and methods provided on the\n`ExpressHandlebars` constructor:\n\n#### `getHandlebarsSemver(handlebars)`\n\nReturns a semver-compatible version string for the specified `handlebars`\nmodule/implementation.\n\nThis utility function is used to compute the value for an `ExpressHandlebars`\ninstance's `handlebarsVersion` property.\n\n\n[Handlebars bug]: https://github.com/wycats/handlebars.js/pull/389\n\n\nExamples\n--------\n\n### [Basic Usage][]\n\nThis example shows the most basic way to use this view engine.\n\n### [Advanced Usage][]\n\nThis example is more comprehensive and shows how to use many of the features of\nthis view engine, including helpers, partials, multiple layouts, etc.\n\nAs noted in the **Package Design** section, this view engine's implementation is\ninstance-based, and more advanced usages can take advantage of this. The\nAdvanced Usage example demonstrates how to use an `ExpressHandlebars` instance\nto share templates with the client, among other features.\n\n\n[Basic Usage]: https://github.com/ericf/express3-handlebars/tree/master/examples/basic\n[Advanced Usage]: https://github.com/ericf/express3-handlebars/tree/master/examples/advanced\n\n\nLicense\n-------\n\nThis software is free to use under the Yahoo! Inc. BSD license.\nSee the [LICENSE file][] for license text and copyright information.\n\n\n[LICENSE file]: https://github.com/ericf/express3-handlebars/blob/master/LICENSE\n","_attachments":{},"homepage":"https://github.com/ericf/express3-handlebars","bugs":{"url":"https://github.com/ericf/express3-handlebars/issues"}}