1. EJS是什么?“E” 代表什么?可以表示 “可嵌入(Embedded)”,也可以是“高效(Effective)”、“優(yōu)雅(Elegant)”或者是“簡(jiǎn)單(Easy)”。EJS 是一套簡(jiǎn)單的模板語(yǔ)言," />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 高效的嵌入式JavaScript模板引擎-EJS

高效的嵌入式JavaScript模板引擎-EJS

時(shí)間:2023-06-06 15:33:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-06-06 15:33:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

高效的嵌入式JavaScript模板引擎-EJS:本文首發(fā)在我的個(gè)人博客中:


1. EJS是什么?

“E” 代表什么?可以表示 “可嵌入(Embedded)”,也可以是“高效(Effective)”、“優(yōu)雅(Elegant)”或者是“簡(jiǎn)單(Easy)”。EJS 是一套簡(jiǎn)單的模板語(yǔ)言,幫你利用普通的 JavaScript 代碼生成 HTML 頁(yè)面。EJS 沒有如何組織內(nèi)容的教條;也沒有再造一套迭代和控制流語(yǔ)法;有的只是普通的 JavaScript 代碼而已。
因?yàn)樽罱沂褂玫?code>Hexo博客框架使用到了EJS,所以如果想要實(shí)現(xiàn)一些自定義的功能,就需要了解一下EJS。

Hexo的文章在這里:

但是最近我發(fā)現(xiàn)還有一個(gè)使用Vue驅(qū)動(dòng)的靜態(tài)網(wǎng)站生成器,叫做VuePress,特色是可以在Markdown中使用Vue組件,又可以使用Vue來(lái)開發(fā)自定義主題,考慮什么時(shí)候研究一下。

2. 安裝

2.1 npm安裝

利用 NPM 安裝 EJS 很簡(jiǎn)單。

npm install ejs

2.2 直接引入

從這里下載 最新的瀏覽器版本,然后引入頁(yè)面即可。

<script src="ejs.js"></script>

3. 使用

因?yàn)槭菍W(xué)習(xí)的原因,我并沒有考慮過用EJS搭建項(xiàng)目,所以我這里就選擇直接引入html文件樣式如下:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>測(cè)試ejs</title></head><body><!-- ejs渲染的容器 --><div id="app"></div><!-- 引入ejs --><script src="./ejs.min.js"></script><script> /* 書寫ejs */ let people = ['geddy', 'neil', 'alex'], html = ejs.render('<%= people.join(", "); %>', {people: people}); /* 將寫好的ejs進(jìn)行渲染 */ document.getElementById('app').innerHTML = html;</script></body></html>Vue、React一樣,需要一個(gè)容器,好讓EJS渲染到html上面。

3.1 express

后面打臉的事情發(fā)生了,因?yàn)槲野l(fā)現(xiàn)如果是在瀏覽器上使用EJSejs.renderFileinclude無(wú)法正常工作。

所以我們來(lái)搭建一個(gè)簡(jiǎn)單的基于express的后端。

首先我們創(chuàng)建一個(gè)package.json文件,創(chuàng)建方法為通過CMD運(yùn)行:

npm init然后一路回車,就可以看到文件夾中多出了一個(gè)文件package.json

安裝ejsexpress。

npm install ejs express nodemon -D然后在package.json同級(jí)目錄下創(chuàng)建index.js。

直接引入的代碼可以改成下面的這個(gè)樣子:

const express = require('express');const ejs = require('ejs');const app = express();/* 路由 */app.get('/', (req, res) => { let people = ['geddy', 'neil', 'alex'], html = ejs.render('<%= people.join(", "); %>', {people: people}); res.send(html);});/* 監(jiān)聽端口 */app.listen(8080, function () { console.log('開啟服務(wù)成功!');});最后使用nodemon index.js運(yùn)行。

那么在瀏覽器上面輸入localhost:8080就可以看到渲染后的界面了。

4. 方法

下面的代碼都在express搭建的后端環(huán)境上運(yùn)行。

4.1 template

編譯字符串得到模板函數(shù)。

let template = ejs.compile(str, options);template(data); // => 輸出渲染后的 HTML 字符串例子:

/* 書寫ejs */let html = ejs.compile('<%=123 %>')();/* 將寫好的ejs進(jìn)行渲染 */res.send(html);

4.2 render

直接渲染字符串并生成HTML

ejs.render(str, data, options); // => 輸出渲染后的 HTML 字符串例子:

/* 書寫ejs */let people = ['geddy', 'neil', 'alex'], html = ejs.render('<%= people.join(", "); %>', {people: people});/* 將寫好的ejs進(jìn)行渲染 */res.send(html);

4.3 renderFile

解析文件生成HTML

ejs.renderFile(filename, data, options, function(err, str){ // str => 輸出渲染后的 HTML 字符串});例子:

let people = ['geddy', 'neil', 'alex'], html = ejs.renderFile('./test.ejs', (err, str) => { res.send(str); });

4.4 參數(shù)

上面3個(gè)方法中的options可以選擇的參數(shù)如下:

5. 標(biāo)簽含義

6. 引入其它文件

通過 include 指令將相對(duì)于模板路徑中的模板片段包含進(jìn)來(lái)。(需要提供 ‘filename‘ 參數(shù)。)

因?yàn)樵擁?xiàng)需要使用到fs所以只有在Node環(huán)境中才能生效,也就是說需要搭建一個(gè)Node后端服務(wù)器。

let people = ['geddy', 'neil', 'alex'], html = ejs.render(`<%- include('test.ejs') %>`, {filename: 'test.ejs'});

7. 自定義分隔符

可針對(duì)單個(gè)模板或全局使用自定義分隔符:

let ejs = require('ejs'), users = ['geddy', 'neil', 'alex'];// 單個(gè)模板文件ejs.render('<?= users.join(" | "); ?>', {users: users}, {delimiter: '?'});// => 'geddy | neil | alex'// 全局ejs.delimiter = '$';ejs.render('<$= users.join(" | "); $>', {users: users});// => 'geddy | neil | alex'

8. 緩存

EJS 附帶了一個(gè)基本的進(jìn)程內(nèi)緩存,用于緩在渲染模板過程中所生成的臨時(shí) JavaScript 函數(shù)。 通過 Node 的 lru-cache 庫(kù)可以很容易地加入 LRU 緩存:

let ejs = require('ejs'), LRU = require('lru-cache');ejs.cache = LRU(100); // 具有 100 條內(nèi)容限制的 LRU 緩存如果要清除 EJS 緩存,調(diào)用 ejs.clearCache 即可。如果你正在使用的是 LRU 緩存并且需要設(shè)置不同的限額,則只需要將 ejs.cache 重置為 一個(gè)新的 LRU 實(shí)例即可。

9. 自定義文件加載器

默認(rèn)的文件加載器是 fs.readFileSync,如果你想要的自定義它, 設(shè)置ejs.fileLoader 即可。

let ejs = require('ejs');let myFileLoader = function (filePath) { return 'myFileLoader: ' + fs.readFileSync(filePath);};ejs.fileLoader = myFileLoad;使用此功能,您可以在讀取模板之前對(duì)其進(jìn)行預(yù)處理。

10. 布局(Layouts)

EJS 并未對(duì)塊(blocks)提供專門的支持,但是可以通過 包含頁(yè)眉和頁(yè)腳來(lái)實(shí)現(xiàn)布局,如下所示:

<%- include('header'); -%><h1> Title</h1><p> My page</p><%- include('footer'); -%>

11. 總結(jié)

總的來(lái)說這篇文章幾乎就是參考了官方的文檔,只是添加了一些使用方法,官方文檔上某些用法講的不是太明確。

EJS上手還是非常簡(jiǎn)單的,但是有些高級(jí)用法就比較難了,因?yàn)?code>EJS對(duì)于我來(lái)說不算很實(shí)用,所以就不過多的進(jìn)行研究了,如果有用到,再研究也不遲。

Nodejs搭建的后端中可能會(huì)用到EJS,但是前端項(xiàng)目一般不會(huì)使用EJS

EJS最方便的地方就是在于將項(xiàng)目給別人使用的時(shí)候,人家不用過多的去了解你的代碼,直接修改配置文件就可以達(dá)到自己想要的效果。比如說Hexo中的配置都集中在_config.yml這個(gè)文件中,你根本不需要去一行一行的瀏覽源代碼,就可以實(shí)現(xiàn)修改,達(dá)到你想要的效果。

12. 參考資料



關(guān)鍵詞:模板,引擎

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉