专栏首页IMWeb前端团队如何编写fis3插件

如何编写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 条评论
登录 后参与评论

相关文章

  • 如何编写fis3插件

    官方的这张图,对fis的构建流程讲述的很清楚了,主要包括单文件编译和打包,业务中的插件也主要是这两种,至于是pre还是post,差别不是特别大。主要记住一点区...

    IMWeb前端团队
  • FIS源码解析-整体架构

    虽然FIS整体的源码结构比较清晰,不过讲解起来也是个系统庞大的工程,笔者尽量的挑重点的讲。如果读者有感兴趣的部分笔者没有提到的,或者是存在疑惑的,可以在评论里跑...

    IMWeb前端团队
  • FIS源码解析-整体架构

    本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 序言 这里假设本文读者对FIS已经比较熟悉,如还不了解,可猛击官方文档。 ...

    IMWeb前端团队
  • 如何编写fis3插件

    官方的这张图,对fis的构建流程讲述的很清楚了,主要包括单文件编译和打包,业务中的插件也主要是这两种,至于是pre还是post,差别不是特别大。主要记住一点区...

    IMWeb前端团队
  • jcaptcha配置验证码

    public static final String SESSION_ID = "JSESSIONID";

    HUC思梦
  • 判断大小端的几种方法

    Qt君
  • 如何高效地学习编程语言

    学习编程语言是一种技巧:做好了,你会感受到掌握新事物之后的快感(dopamine:多巴胺);做不好,就会接二连三的沮丧,甚至放弃。下面这些学习编程语言的最佳技巧...

    lambeta
  • OSX下编译mpv(成功通过)

    首先download下来mpv的代码 git clone https://github.com/mpv-player/mpv.git 然后安装ffmpeg...

    用户3765803
  • 使用 yield 压平多层嵌套字典列表混合数据

    在上一篇文章里面,我们讲到了如何使用Python的yield关键字简化代码,压平多层嵌套字典的。

    青南
  • 左手用R右手Python系列——多进程/线程数据抓取与网页请求

    这一篇涉及到如何在网页请求环节使用多进程任务处理功能,因为网页请求涉及到两个重要问题:一是多进程的并发操作会面临更大的反爬风险,所以面临更严峻的反爬风险,二是抓...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券