美文网首页我爱编程
webpack 多页应用 ejs模板的<%= %>特性 复用 h

webpack 多页应用 ejs模板的<%= %>特性 复用 h

作者: LingJJ1100的笔记 | 来源:发表于2017-12-14 15:13 被阅读0次

    参考文章:
    1.webpack多页应用架构系列(十三):构建一个简单的模板布局系统
    2.美图商城改版之——webpack多页应用环境搭建

    组件
    html-webpack-plugin
    自动创建html组件
    template:根据提供的模板创建默认支持html、ejs,其他模板引擎需要相关加载器。

    坑点:如果全局部署了html加载器将不解析<%= %>

    注意:
    ejs文档上,可以通过<% -include(path){option} %>来进行html嵌套。但html-webpack-plugin并不解析 -include语句,会报错。经过百番查找并没有相关组件或配置方法,若有实现方法请告知万分感谢!

    同时html-webpack-plugin 和 ejs-loader的文档也只是展示了<%= %>特性。而查得文章其他教程也是通过该特性进行ejs模板拼接实现复用的。

    如何通过<%= %>进行拼接?

    相关概念
    <%= %>相当于模板的参数。类似卡槽的概念
    html-webpack-plugin的template参数实质只要接受html字符串即可。
    所以在template入口处设置为一个输出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的东西,为什么是用方法调用呢?

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

    疑问:ejs文件又不能import 其他js文件,要如何传入参数呢?

    解答:
    ejs文件被ejs-loader处理之后会变成接受参数并输出字符串的函数

    // 打印 import test from './test.ejs' 模块
    function (obj) { // 接受一个对象参数
        obj || (obj = {});
        var __t, __p = '';
        with (obj) { // 在相应位置传入参数对象的name属性
            __p += '<div>box1</div>\r\n<div>' + // 进行字符串拼接
            ((__t = ( name )) == null ? '' : __t) + // name参数处理
            '</div>';
        }
    return __p // 拼接的模板
    }
    

    html-webpack-plugin的template人口虽然是js文件 实质得到的是 test.ejs模块的输出 __p字符串。

    得出html:

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

    这里只是出入字符串,如果出入的是其他ejs模板,即可实现ejs模板的拼接。

    若需要了解更多关于webpack多页开发推荐阅读:webpack多页应用架构系列

    相关文章

      网友评论

        本文标题:webpack 多页应用 ejs模板的<%= %>特性 复用 h

        本文链接:https://www.haomeiwen.com/subject/mqekwxtx.html