webpack 多頁應(yīng)用 ejs模板的<%= %>特性 復用 html原理

參考文章:
1.webpack多頁應(yīng)用架構(gòu)系列(十三):構(gòu)建一個簡單的模板布局系統(tǒng)
2.美圖商城改版之——webpack多頁應(yīng)用環(huán)境搭建

組件
html-webpack-plugin
自動創(chuàng)建html組件
template:根據(jù)提供的模板創(chuàng)建默認支持html、ejs,其他模板引擎需要相關(guān)加載器。

坑點:如果全局部署了html加載器將不解析<%= %>

注意:
ejs文檔上,可以通過<% -include(path){option} %>來進行html嵌套。但html-webpack-plugin并不解析 -include語句,會報錯。經(jīng)過百番查找并沒有相關(guān)組件或配置方法,若有實現(xiàn)方法請告知萬分感謝!

同時html-webpack-plugin 和 ejs-loader的文檔也只是展示了<%= %>特性。而查得文章其他教程也是通過該特性進行ejs模板拼接實現(xiàn)復用的。

如何通過<%= %>進行拼接?

相關(guān)概念
<%= %>相當于模板的參數(shù)。類似卡槽的概念
html-webpack-plugin的template參數(shù)實質(zhì)只要接受html字符串即可。
所以在template入口處設(shè)置為一個輸出html字符串的js文件。

簡單演示:
我的入口:template: path.resolve(paths.pagesDir, page+'/render.js'), 路徑拼接有點長請忽視,只是用來找到render.js文件就對了。

// 入口文件render.js
import test from './test.ejs'; //引入模塊
module.exports = test({name: '2232'})

疑問:引入的test.ejs 看起來像html的東西,為什么是用方法調(diào)用呢?

// 模板文件 test.ejs
<div>box1</div>
<div><%= name %></div>

疑問:ejs文件又不能import 其他js文件,要如何傳入?yún)?shù)呢?

解答:
ejs文件被ejs-loader處理之后會變成接受參數(shù)并輸出字符串的函數(shù)

// 打印 import test from './test.ejs' 模塊
function (obj) { // 接受一個對象參數(shù)
    obj || (obj = {});
    var __t, __p = '';
    with (obj) { // 在相應(yīng)位置傳入?yún)?shù)對象的name屬性
        __p += '<div>box1</div>\r\n<div>' + // 進行字符串拼接
        ((__t = ( name )) == null ? '' : __t) + // name參數(shù)處理
        '</div>';
    }
return __p // 拼接的模板
}

html-webpack-plugin的template人口雖然是js文件 實質(zhì)得到的是 test.ejs模塊的輸出 __p字符串。

得出html:

<div>box1</div>
<div>2232</div>

這里只是出入字符串,如果出入的是其他ejs模板,即可實現(xiàn)ejs模板的拼接。

若需要了解更多關(guān)于webpack多頁開發(fā)推薦閱讀:webpack多頁應(yīng)用架構(gòu)系列

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容