如何编写fis3插件

目前业务正在逐步迁移到fis3和lego,有许多和业务相关的fis插件需要处理。

fis 编译流程

官方的这张图,对fis的构建流程讲述的很清楚了,主要包括单文件编译和打包,业务中的插件也主要是这两种,至于是pre还是post,差别不是特别大。主要记住一点区别:单文件编译阶段,无法获取文件之间的关联信息;打包阶段,能够拿到项目的所有文件

iconfont 实例

本文以fis接入iconfont插件为例,讲述iconfont接入方案,iconfont大致的流程:

  1. 同步svg,将项目用到的svg,通过iconfont平台同步到项目目录
  2. 编译svg,生成字体文件
  3. 接入字体相关的css问题
  4. html引入css文件

单文件编译处理iconfont

大体的逻辑是:

  1. 遍历项目目录下的所有svg,生成字体文件
  2. 生成css
  3. 所有业务html引入css

配置:

fis.match('/*.html', {
    preprocessor: fis.plugin('iconfont',  {
        svgPath: '../svgs',
        output: 'modules/common/fonts'
    })
})

对根目录下的所有html应用组件,编译一次svg,生成字体文件,然后对业务html引入css文件。

打包阶段处理iconfont

上面的处理方式很粗暴,svg并没有按需生成,更好的方式是:

  1. 获取项目中用到的icon
  2. 查找对应的svg,生成字体文件
  3. 字体css生成
  4. html引入css 其中,第1步,需要通过编译所有文件获取结果,所以必须要在打包截断处理。参考这里

单元测试

fis3一个很大的优势是提供了单元测试的接口,写完插件后,记得要用单元测试过下,同时这也是一个调试的过程(fis2的调试只能依赖具体的项目),主体的代码架构是:

var fs = require('fs'),
    path = require('path'),
    fis = require('fis3'),
    _ = fis.util,
    expect = require('chai').expect,
   // 下面这两个库是提供测试的关键库,用于release
    _release = fis.require('command-release/lib/release.js'),
    _deploy = fis.require('command-release/lib/deploy.js'),
   // 自己编写的插件入口文件
    iconfont = require('../src/');

function release(opts, cb) {
    opts = opts || {};
    _release(opts, function(error, info) {
        _deploy(info, cb);
    });
}
describe('fis-postpackager-iconfont', function() {
    var root = path.join(__dirname, 'src');

    fis.project.setProjectRoot(root);
    // 测试用例

    beforeEach(function() {
          // 这里写各种fis的配置
           fis .match('*', {
                deploy: iconfont({
                         // 自己插件的配置
                })
            });
    });

    it('test case', function() {

        release({
            unique: true
        }, function() {
            // 文件是否生成
            // release 之后,检测是否和预期一致
            console.log('release end');
        });
    });
});

npm publish

这个没啥好说的,注册帐号之后,直接在插件目录下 npm init ,按照格式填写package.json后,直接运行 npm publish,将代码发布出去,这样方便其他人使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

记录安装oracle的那些事(三)之oracle Database R2安装

我是参考下面的安装方法: http://www.doc88.com/p-714757764357.html 其中有几个目录没有完全创建...要自己创建一下。...

182100
来自专栏电光石火

如何安装python

下载自己需要的python版本https://www.python.org/downloads/

216100
来自专栏Jerry的SAP技术分享

使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)

在Cloud Application Studio里新建一个Code List Data Type:

9900
来自专栏雪地二货笔记库

ajax同步请求

在使用jq发送ajax到后台时默认是异步请求,会在发送ajax请求的同时继续执行下面的js代码,如果下面的js代码需要使用到ajax传输过来的参数时,就会获取不...

1K10
来自专栏jojo的技术小屋

原 模块化编程之require.js

作者:汪娇娇 日期:2016.5.4 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,...

30050
来自专栏Jackson0714

Java环境变量配置

38380
来自专栏Laoqi's Linux运维专列

安装PHP7

PHP 7 安装 : 其实安装PHP7的步骤和安装php5完全一样。 下载安装 cd /usr/local/src/ wget http://cn2.php....

76360
来自专栏尾尾部落

手把手教你在centos7中安装mysql数据库

CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了。 所以要安装mysql有两种方法,一种是直接安装mariadb,另...

24840
来自专栏JetpropelledSnake

Linux学习笔记之CentOS6.9 防火墙的关闭以及开启

有的时候,我们需要对系统的防火墙进行操作,今天小编就给大家讲解一下如何开启以及关闭CentOS6.9系统下的防火墙。

9810
来自专栏漫漫深度学习路

ubuntu创建新用户

在Ubuntu下创建一个新的用户: 使用adduser step1: 切换成 root登录 step2: adduser username step3: 跟随系...

49290

扫码关注云+社区

领取腾讯云代金券