插件系统

    可选插件

    本地安装

    在jdf工程根目录下执行npm install pluginName --save-dev,方便快捷,但是每新建一个工程就需要重新install。

    全局安装

    执行npm install -g pluginName全局安装后,环境变量中添加NODE_PATH,这样jdf就可以读取全局的plugin了

    暴露的编译节点

    • 编译开始前beforeBuild
    • 编译完成后afterBuild
    • widget模板编译前beforeTplRender
    • widget模板插入html页面前beforeTplInsert

    后续可以提供更多的编译节点。

    在json文件顶层新增plugins属性,plugins是一个数组列表,每一个数组元素为一个插件配置,插件配置可以直接写插件名,也可以以对象的形式传递,目前受到规范的只有name属性,代表了插件名。

    插件在各个节点的执行顺序为plugins数组声明顺序

    插件约束

    插件必须要暴露一个名为Plugin的函数,这个函数返回一个对象,对象里必须包含setConfig方法,该方法会在插件require到jdf中时第一时间执行,因此该方法也是插件的初始化方法,初始化工作可以放在这里执行。的option参数在下面单独说明。

    除了setConfig方法以外,jdf编译节点钩子方法的声明也处于其中,可以只声明需要的钩子方法。

    示例:

    1. export const Plugin = function () {
    2. return {
    3. setConfig: function (option) {
    4. Object.assign(config, option || {})
    5. },
    6. return Promise.resolve()
    7. },
    8. afterBuild: function () {
    9. },
    10. beforeTplRender: function (tpl, widgetInfo) {
    11. return tpl
    12. },
    13. beforeTplInsert: function (tpl, widgetInfo) {
    14. return tpl
    15. }
    16. }

    通过setConfig传递。当前提供的属性有两个jdf, ,前者包含jdf配置项,后者为jdf的文件系统。