spon的插件编写规范

spon-plugin

说明

用于 spon 插件管理,包括安装、升级等功能

  • 此为内置插件,安装 spon 时默认安装 spon-plugin
  • 安装一个插件时,会自动安装该插件所依赖的所有插件
  • 移除一个插件时,依赖此插件的其它插件在运行时,会自动再装回来

发布

spon插件的发布默认不能是git工程。若采用git托管spon插件,则必须手动添加.npmignore文件,忽略".git和nodeModules".

.npmignore

# git
.git

# Dependency directory
# Deployed apps should consider commenting this line out:
# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git
node_modules

# IDEA files
.idea
*.iml

用法

install

安装一个或者多个插件

语法

spon plugin install <name>[ <name>[ <name>...]]  

参数

  • name: 插件名称

示例

spon plugin install spon-scm spon-tbc # 安装 scm 和 tbc  

remove

移除一个或者多个插件

语法

spon plugin remove <name>[ <name>[ <name>...]]  

参数

  • name: 插件名称

示例

spon plugin remove spon-test # 移除 test 插件  

update

更新一个、多个或所有插件

语法

spon plugin update [<name>[ <name>[ <name>...]]]  

参数

  • name: 插件名称

示例

spon plugin update spon-a spon-b # 更新 scm 和 tbc 插件  
spon plugin update # 更新所有插件  

list

列出已装插件详情

语法

spon plugin list  

参数

示例

plugin编写规范

插件名称

插件起名也有一定的规范约束,即以spon-为前缀,因此,在插件的package.json中,name字段需要是spon-***格式。 在使用线上spon-test插件时,可以通过spon plugin install spon-test命令,也可以使用spon plugin install test 命令,默认会针对test添加‘spon-’前缀!

实例参考

spon-test插件是一个说明性插件。在spon中,任何一个插件都是npm模块,因此编写一个插件首先需要初始化为一个npm模块;

以下为spon-test/index.js中源码

/**
 * Created by showjoy on 16/2/2.
 */
module.exports = function(spon){  
  spon.cli
    .command('_abc')
    .description('test _abc')
    .action(function(){
      console.log("_abc work!");
    });

  spon.publish('isTest', function(data,cb){
    console.log('is testing...');
    // 执行回调函数,其中data为传入参数,cb为回调函数
    cb(data);
  });

  spon.publish('noTest', function(data,cb){
    cb();
  });
}

这样,我们在spon-test插件中注册了一个spon _abc命令,并且暴露了“isTest”和“noTest”接口,可以让其他的 插件使用接口:

spon.consume('isTest',{data: 'is nothing'},function(data){  
    ...
})

package.json:

{
  "name": "spon-test",
  "version": "1.0.0",
  "description": "test",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": {
    "name": "yuxiu"
  },
  "license": "ISC",
  "_id": "spon-test@1.0.0",
  "_shasum": "244676d281cbda2528fa6e68c78c30a18a95631e",
  "_from": "spon-test@latest",
  "_npmVersion": "2.14.2",
  "_nodeVersion": "4.0.0",
  "_npmUser": {
    "name": "yuxiu",
    "email": "tanchengyl@126.com"
  },
  "dist": {
    "shasum": "244676d281cbda2528fa6e68c78c30a18a95631e",
    "tarball": "http://registry.npmjs.org/spon-test/-/spon-test-1.0.0.tgz"
  },
  "maintainers": [
    {
      "name": "yuxiu",
      "email": "tanchengyl@126.com"
    }
  ],
  "_npmOperationalInternal": {
    "host": "packages-9-west.internal.npmjs.com",
    "tmp": "tmp/spon-test-1.0.0.tgz_1454391126440_0.1255379538051784"
  },
  "directories": {},
  "_resolved": "http://registry.npmjs.org/spon-test/-/spon-test-1.0.0.tgz",
  "readme": "ERROR: No README data found!"
}

插件sdk

通过index.js,可以看到exports的函数注入了一个spon参数,这是spon runtime,它会解析所有本地spon的所有 插件,并且通过publish暴露插件接口,可以给其他插件使用。

注入到插件的spon常用接口如下:

  spon.publish(apiName,function(data,cb){}) // 发布接口,第二个参数为接口实现,该函数接受两个参数,分别为“传入数据”和“回调”
  spon.cli.command() // 发布命令行接口,具体命令行编写规范按照npm模块 “cj/commander” 使用
  spon.log.info() // 输出调试信息
  spon.log.warn() // 输出警告信息
  spon.log.error() // 输出错误信息

欲休

继续阅读此作者的更多文章

海创园尚妆