Keep

读 koa-views 源码

发布:

koa-views

代码量只有 50+ 行 - 当然用到了其它库

// 开启 debug 模式
process.env.DEBUG = 'koa-views'

// 主要关注数据对象合并关系
// locals => ctx.render('tpl', locals) 可选
// options => 初始化时,传递的 options 属性
// ctx.state => koa 实现,middleware 共享数据
state = Object.assign(locals = {}, options, ctx.state || {})

// 调用引擎,返回 promise
// 支持自定义模板引擎,engineSource 属性,
// 返回引擎即可
// engine(realfilepath, state)

consolidate

自身代码量相当小,大部分都是在兼容各家模板

// 用来存储各引擎
requires = {}

// 用来存储各编译后的函数
// 关系:{ filename: tmpl }
cacheStore = {}

// 用来存储文件内容 { path: string }
// 当存储到 cacheStore 后,这里就直接清除
readCache = {}

// 清理 cacheStore 和 readCache
clearCache()

// 读/写接口,依赖 options:
// cache/filename
cache(options, compiled)

// 读文件内容,
// 把内容的 BOM 头去掉。
// string = string.replace(/^\uFEFF/, '');
// 如果支持 cache
// 就缓存到 readCache[path] = string
read(path, options, fn)

// 把各个 partial: {key: _path_}
// 更新为 {key: string}
// 特殊处理部分:
// _path_ 不存在 (null, undefined, false),直接跳过
// _path_ 是绝对地址,如果不存在 extname, 就补充为 path 的 extname
// _path_ 是相对地址,
// file = join(dirname(path), _path_, extname(path))
readPartials(path, options, fn)

// 把 callback 形式转成 promise 形式
promisify(fn, exec)

// 通用模板处理形式
// 支持 partials
// return (path, options, fn) => {}
fromStringRenderer(name)

avatar image

@read2025, 生活在北京(北漂),程序员,宅,马拉松[纯粹],喜欢动漫。"骑士总能救出公主,是因为恶龙从没伤害过她"