UNPKG

2.72 kBMarkdownView Raw
1# 插件系统
2
3## 目的
4为jdf编译流程加入自定义的一些功能
5
6## 可选插件
7* [jdf-cms](https://www.npmjs.com/package/jdf-cms)
8* [jdf-extract-template](https://www.npmjs.com/package/jdf-extract-template)
9
10## 使用方法
11### 插件集成
12#### 本地安装
13在jdf工程根目录下执行`npm install pluginName --save-dev`,方便快捷,但是每新建一个工程就需要重新install。
14
15#### 全局安装
16执行`npm install -g pluginName`全局安装后,环境变量中添加NODE_PATH,这样jdf就可以读取全局的plugin了
17
18[如何添加NODE_PATH](https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package)
19
20### 添加到jdf配置
21详见“config.json配置项说明”
22
23## 暴露的编译节点
24* 编译开始前`beforeBuild`
25* 编译完成后`afterBuild`
26* widget模板编译前`beforeTplRender`
27* widget模板插入html页面前`beforeTplInsert`
28
29后续可以提供更多的编译节点。
30
31## `config.json`配置项说明
32在json文件顶层新增plugins属性,plugins是一个数组列表,每一个数组元素为一个插件配置,插件配置可以直接写插件名,也可以以对象的形式传递,目前受到规范的只有`name`属性,代表了插件名。
33
34插件在各个节点的执行顺序为plugins数组声明顺序
35
36``` JSON
37{
38 "plugins": [
39 {
40 "name": "jdf-cms"
41 },
42 "jdf-extract-template"
43 ]
44}
45
46```
47
48## 插件约束
49编写插件要遵循一些规范,以便被jdf模块系统初始化。
50### 暴露方法
51插件必须要暴露一个名为`Plugin`的函数,这个函数返回一个对象,对象里必须包含`setConfig`方法,该方法会在插件`require`到jdf中时第一时间执行,因此该方法也是插件的初始化方法,初始化工作可以放在这里执行。`setConfig``option`参数在下面单独说明。
52
53除了`setConfig`方法以外,jdf编译节点钩子方法的声明也处于其中,可以只声明需要的钩子方法。
54
55示例:
56```
57export const Plugin = function () {
58 return {
59 setConfig: function (option) {
60 Object.assign(config, option || {})
61 },
62 beforeBuild: function () {
63 return Promise.resolve()
64 },
65 afterBuild: function () {
66 return Promise.resolve()
67 },
68 beforeTplRender: function (tpl, widgetInfo) {
69 return tpl
70 },
71 beforeTplInsert: function (tpl, widgetInfo) {
72 return tpl
73 }
74 }
75}
76```
77
78## jdf提供属性
79jdf工具提供了几个内部变量给插件使用。
80
81通过`setConfig`传递。当前提供的属性有两个`jdf`, `VFS`,前者包含jdf配置项,后者为jdf的文件系统。
82
\No newline at end of file