插件系统

目的

为jdf编译流程加入自定义的一些功能

可选插件

使用方法

插件集成

本地安装

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

全局安装

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

如何添加NODE_PATH

添加到jdf配置

详见“config.json配置项说明”

暴露的编译节点

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

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

config.json配置项说明

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

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

  1. {
  2. "plugins": [
  3. {
  4. "name": "jdf-cms"
  5. },
  6. "jdf-extract-template"
  7. ]
  8. }

插件约束

编写插件要遵循一些规范,以便被jdf模块系统初始化。

暴露方法

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

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

示例:

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

jdf提供属性

jdf工具提供了几个内部变量给插件使用。

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