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

相关文章

来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2787
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4425
来自专栏魂祭心

原 canvas绘制clock

5194
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2956
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

3017
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3705
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2882
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

5548
来自专栏落花落雨不落叶

canvas画简单电路图

88811
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

3025

扫码关注云+社区