优化配置

master
宇天 2020-04-06 23:56:03 +08:00
parent f1a5c207d7
commit fbec8cfdd0
4 changed files with 20 additions and 28 deletions

View File

@ -6,7 +6,7 @@
> **注:** > **注:**
> >
> 1. `只支持.tpl后缀的模板文件 在引用模板文件时该后缀可以省略不写。` > 1. `默认使用.tpl后缀的模板文件 在引用模板文件时该后缀可以省略不写。`
> 2. `模板的路径/文件名, 可以不写引号(推荐)` > 2. `模板的路径/文件名, 可以不写引号(推荐)`
## API ## API
@ -27,7 +27,7 @@ const smarty = new Smartyx()
smarty.config('cache', false) smarty.config('cache', false)
smarty.config('path', '{path_of_views}') smarty.config('path', '{path_of_views}')
smarty.config('cache', false) smarty.config('ext', '.htm') //修改模板后缀名
// 或者实例化时传入 // 或者实例化时传入
const smarty = new Smartyx({cache: true, path: '{path_of_views}', ...}) const smarty = new Smartyx({cache: true, path: '{path_of_views}', ...})
@ -60,14 +60,14 @@ smarty.assign('page', 20)
smarty.assign('phoneReg', /^1[34578]\d{9}$/) smarty.assign('phoneReg', /^1[34578]\d{9}$/)
``` ```
### 3.render(tpl[, uuid]) ### 3.render(tpl[, noParse])
* tpl `<String>` * tpl `<String>`
* uuid `<String>` 可选 * noParse `<String>` 可选
> 该方法用于渲染一个模板,返回值为一个 Promise 对象; > 该方法用于渲染一个模板,返回值为一个 Promise 对象;
> `tpl` 即为要渲染的模板的绝对路径,默认是`.tpl`后缀, 该后缀可以省略。 > `tpl` 即为要渲染的模板的绝对路径,默认是`.tpl`后缀, 该后缀可以省略。
> `uuid` 是一个唯一标识,用于开启模板缓存,但又想页面渲染的时候,可以根据不同的情况渲染不同的内容。 > `noParse` 对于一些页面, 本身不需要走渲染动态数据的, 可加上这个参数, 直接原样输出模板
```javascript ```javascript
smarty.assign('foo', 'bar') smarty.assign('foo', 'bar')

View File

@ -8,6 +8,7 @@
require('es.shim') require('es.shim')
const Tool = require('./lib/tool') const Tool = require('./lib/tool')
const path = require('path')
function hash(str) { function hash(str) {
return Buffer.from(str).toString('hex') return Buffer.from(str).toString('hex')
@ -21,13 +22,17 @@ class Smarty {
} }
this.__REG__ = new RegExp(this.opt.ext + '$') this.__REG__ = new RegExp(this.opt.ext + '$')
this.tool = new Tool(this.opt) this.tool = new Tool()
this.__DATA__ = Object.create(null) // 预定义的变量储存 this.__DATA__ = Object.create(null) // 预定义的变量储存
this.__CACHE__ = Object.create(null) // 模块缓存 this.__CACHE__ = Object.create(null) // 模块缓存
} }
config(key, val) { config(key, val) {
this.tool.config(key, val) key += ''
if (!key || !val) {
return
}
this.opt[key] = val
} }
/** /**
@ -48,11 +53,10 @@ class Smarty {
/** /**
* [render 模板渲染] * [render 模板渲染]
* @param {String} tpl 模板路径 * @param {String} tpl 模板路径
* @param {String} uuid 唯一标识
* @param {Boolean} noParse 不解析直接读取 * @param {Boolean} noParse 不解析直接读取
* @return {Promise} 返回一个Promise对象 * @return {Promise} 返回一个Promise对象
*/ */
render(tpl = '', uuid = '', noParse = false) { render(tpl = '', noParse = false) {
var key = null var key = null
if (!this.tool.opt.path) { if (!this.tool.opt.path) {
throw new Error('Smarty engine must define path option') throw new Error('Smarty engine must define path option')
@ -64,8 +68,9 @@ class Smarty {
if (!this.__REG__.test(tpl)) { if (!this.__REG__.test(tpl)) {
tpl += this.opt.ext tpl += this.opt.ext
} }
tpl = path.resolve(this.opt.path, tpl)
key = hash(tpl + uuid) key = hash(tpl)
if (this.opt.cache && this.__CACHE__[key]) { if (this.opt.cache && this.__CACHE__[key]) {
return Promise.resolve(this.__CACHE__[key]) return Promise.resolve(this.__CACHE__[key])

View File

@ -1,5 +1,5 @@
/** /**
* 模板引擎预处理对dojs框架有依赖 * 模板引擎预处理
* @authors yutent (yutent@doui.cc) * @authors yutent (yutent@doui.cc)
* @date 2016-01-02 21:26:49 * @date 2016-01-02 21:26:49
* *
@ -7,11 +7,10 @@
'use strict' 'use strict'
let fs = require('iofs') const fs = require('iofs')
let path = require('path')
class Tool { class Tool {
constructor(opt) { constructor() {
this.opt = { this.opt = {
delimiter: ['<!--{', '}-->'], //模板界定符 delimiter: ['<!--{', '}-->'], //模板界定符
labels: { labels: {
@ -32,8 +31,6 @@ class Tool {
} }
} }
this.opt = this.opt.merge(opt)
//过滤器 //过滤器
this.filters = { this.filters = {
html: function(str = '') { html: function(str = '') {
@ -70,8 +67,7 @@ class Tool {
} }
} }
__tpl__(name) { __tpl__(file) {
var file = path.resolve(this.opt.path, name)
var buf = null var buf = null
if (!fs.exists(file)) { if (!fs.exists(file)) {
throw new Error(`Can not find template "${file}"`) throw new Error(`Can not find template "${file}"`)
@ -100,15 +96,6 @@ class Tool {
return this.__exp__(opt.delimiter[0] + tag + opt.delimiter[1]) return this.__exp__(opt.delimiter[0] + tag + opt.delimiter[1])
} }
//设置 配置信息
config(key, val) {
key += ''
if (!key || !val) {
return
}
this.opt[key] = val
}
//解析普通字段 //解析普通字段
matchNormal(m) { matchNormal(m) {
let begin = this.__exp__('^' + this.opt.delimiter[0] + '[=\\s]?') let begin = this.__exp__('^' + this.opt.delimiter[0] + '[=\\s]?')

View File

@ -1,6 +1,6 @@
{ {
"name": "smartyx", "name": "smartyx",
"version": "1.1.0", "version": "1.2.0",
"description": "nodeJS模板引擎理念源自于PHP的smarty模板引擎", "description": "nodeJS模板引擎理念源自于PHP的smarty模板引擎",
"keywords": ["fivejs", "smarty", "template", "ejs", "jade"], "keywords": ["fivejs", "smarty", "template", "ejs", "jade"],
"author": "宇天 <yutent@doui.cc>", "author": "宇天 <yutent@doui.cc>",