fis入门简介

简介:

前言:

本文对fis进行概要性的介绍,由于篇幅原因,不会涉及太多使用、设计上的细节。想要了解更多,可参考官方文档。本文内容梗概:

  1. 什么是fis
  2. 环境搭建
  3. fis示例
  4. 项目配置
  5. 插件开发
  6. 打包
  7. 二次开发
  8. 对比grunt
  9. 写在后面

什么是FIS

  • FIS是专为解决前端开发中自动化工具、性能优化、模块化框架、开发规范、代码部署、开发流程等问题的工具框架。
  • 专注于前端构建,无需进行任何配置轻松应付常见需求。

Alt text

特点

个人总结:

  1. 贴近前端工程实际(前端项目的构建需求、问题基本都已经帮你考虑到了)
  2. 配置合理、灵活
  3. 高效
  4. 易扩展

官方:
三条命令,满足大部分的构建需求(每个命令带有数量不等的参数)

  • 跨平台:基于node搭建,可运行于windows、mac、linux等平台
  • 快速构建:合理的构建流程设计,有效提高构建性能
  • 性能优化:内置支持文件压缩、打包等
  • 本地调试:内建支持的server,方便本地调试(有java、node版)
  • 灵活扩展:插件扩展、二次开发等蛮方便的
  • 轻松上手:上手即用是没问题的,如果希望个性化定制,需对fis的整体架构设计有一些了解(单文件编译流程、插件扩展点神马的)

Alt text

Alt text

环境搭建

npm install -g fis # 安装fis
npm install -g lights # fis采用lights管理资源;要求node版本在v0.10.27以上

demo示例

假设项目如下,这里主要展示几种能力:

  1. 资源嵌入
  2. 资源定位
  3. 资源优化
  4. 本服务器
  5. 打包
fis-first-demo/
└── src
    ├── css
    │   └── main.css
    ├── img
    │   ├── avatar.png
    │   └── saber.jpeg
    ├── index.html
    ├── js
    │   ├── lib.js
    │   ├── main.js
    │   └── util.js
    └── saber.png

运行如下命令

fis release -o 
fis server start 

先看看运行结果

Alt text

资源嵌入

<script type="text/javascript" src="js/lib.js?__inline"></script> 

资源定位

下面图片,release后生成到/static/avatar.png

<img class="avatar" src="img/avatar.png" width="115" height="115" /> 

配置文件fis-conf.js

fis.config.merge({
    roadmap : {
        path : [
            {
                //所有的js文件
                reg : '**.js',
                //发布到/static/xxx目录下
                release : '/static/$&'
            },
            {
                //所有的css文件 reg : '**.css', //发布到/static/xxx目录下 release : '/static/$&' }, { //所有img目录下的.png,.gif文件 reg : /^\/img\/(.*\.(?:png|gif))/i, //发布到/static/xxx目录下 release : '/static/$1' } ] } }); 

资源优化

.clear{clear: both;} .intro{margin: 10px;} .intro .avatar{float: left;} .intro .wording{float: left; margin-left: 10px;} 

优化后

.clear{clear:both}.intro{}.intro .avatar{float:left}.intro .wording{float:left} 

本地服务器

fis server start --type node

项目配置

按照配置粒度划分,fis的配置主要包括几项:

  1. project:项目配置,如编码、支持文件类型等
  2. modules:插件配置,指明用特定的插件来处理特定类型的文件。跟settings两者需要进行区分
  3. settings:针对具体插件的配置
  4. roadmap:定制项目文件属性。常用的配置项为同步路径的配置(从src到dist之间的映射)、线上路径的映射。
  5. pack:配置要打包的文件。并不会对文件进行实际打包操作,而是生成一份打包关系映射表map.json,如需实际打包,可根据这份表自行定制打包方案。
  6. deploy:部署相关的配置。

Alt text

简单例子

下面是来自官方的例子,挺详细就不展开了:http://fis.baidu.com/docs/api/fis-conf.html

//fis-conf.js
fis.config.merge({
    modules : {
        parser : {
            //coffee后缀的文件使用fis-parser-coffee-script插件编译
            coffee : 'coffee-script',
            //less后缀的文件使用fis-parser-less插件编译
            //处理器支持数组,或者逗号分隔的字符串配置 less : ['less'], //md后缀的文件使用fis-parser-marked插件编译 md : 'marked' } }, roadmap : { ext : { //less后缀的文件将输出为css后缀 //并且在parser之后的其他处理流程中被当做css文件处理 less : 'css', //coffee后缀的文件将输出为js文件 //并且在parser之后的其他处理流程中被当做js文件处理 coffee : 'js', //md后缀的文件将输出为html文件 //并且在parser之后的其他处理流程中被当做html文件处理 md : 'html' } } }); 
//配置字符串全部转换为ascii字符
fis.config.merge({
    settings : {
        optimizer : {
            'uglify-js' : {
                output : {
                    ascii_only : true
                }
            }
        }
    }
});

插件开发

首先需要理解fis的单文件编译过程:
个人总结:http://www.cnblogs.com/chyingp/p/fis-plugins-optimize.html
官方文档:http://fis.baidu.com/docs/more/fis-base.html

Alt text

实际例子:fis-optimizer-test

配置:

fis.config.merge({ modules : { optimizer : { //js后缀文件会经过fis-optimizer-test插件的压缩优化 js : 'test' } } }); 

插件源码:

/*
 * fis插件示例
 * http://www.cnblogs.com/chyingp/p/fis-plugins-optimize.html
 */
'use strict';

module.exports = function(content, file, conf){ return content+'\nvar nick ="程序猿小卡"'; }; 

fis release -o就可以看到效果了

console.log('inline file');

function hello(argument) { var nick = 'casper'; var age = 26; } var nick ="casper" // 这货就是fis-optimizer-test加上的 

打包

前面提到过,fis的打包只是生成一份映射表map.json,具体的打包方案需要用户自行定制。

打包规则来源

  1. 依赖声明
  2. 显示声明

依赖声明

比如在index.html里声明依赖

<!--
    @require demo.js
    @require "demo.css"
-->

编译后生成

{
    "res" : {
        "demo.css" : { "uri" : "/static/css/demo_7defa41.css", "type" : "css" }, "demo.js" : { "uri" : "/static/js/demo_33c5143.js", "type" : "js", "deps" : [ "demo.css" ] } }, "pkg" : {} } 

显示声明

打包配置如下:

//fis-conf.js
fis.config.merge({
    pack : {
        //打包所有的demo.js, script.js文件
        //将内容输出为static/pkg/aio.js文件
        'pkg/aio.js' : ['**/demo.js', /\/script\.js$/i], //打包所有的css文件 //将内容输出为static/pkg/aio.css文件 'pkg/aio.css' : '**.css' } }); 

生成的表map.json

{
    "res": {
        "demo.css": { "uri": "/static/css/demo_7defa41.css", "type": "css", "pkg": "p1" }, "demo.js": { "uri": "/static/js/demo_33c5143.js", "type": "js", "deps": [ "demo.css" ], "pkg": "p0" }, "index.html": { "uri": "/index.html", "type": "html", "deps": [ "demo.js", "demo.css" ] }, "script.js": { "uri": "/static/js/script_32300bf.js", "type": "js", "pkg": "p0" }, "style.css": { "uri": "/static/css/style_837b297.css", "type": "css", "pkg": "p1" } }, "pkg": { "p0": { "uri": "/static/pkg/aio_5bb04ef.js", "type": "js", "has": [ "demo.js", "script.js" ], "deps": [ "demo.css" ] }, "p1": { "uri": "/static/pkg/aio_cdf8bd3.css", "type": "css", "has": [ "demo.css", "style.css" ] } } } 

二次开发

官方介绍

1、简单的一个配置即可成为另外一个工具
2、自定义插件+规范+... 一个解决诸多问题的解决方案

FIS具有高扩展性,可以通过配置进行各种目录结构等的定制,同时FIS拥有足够数量的插件,用户可以下载这些插件,配置使用。也可以按照自己的需求开发定制插件。可能有些人会问,如果插件多了后该如何维护。其实,FIS具有可包装性。比如现在市面上的fis-plus、gois、jello、spt等都是包装了FIS,可以使用这种包装性,把多个插件以及FIS包装成为新的一个工具。这就是为什么FIS会定义为工具框架的原因。

上面的介绍来自官方文档。对于为何需要二次开发,个人的看法是:

  1. 满足定制需求(废话)
  2. 解决诸多问题,这里除了项目本身的需求,还有工具本身可能存在的问题,如fis、fis插件的升级、多版本并存问题(fis是全局安装的,升个级,所有项目跑不转了这可摊上大事了。。),
drwxr-xr-x  10 nobody  staff  340  7  2 23:14 colors drwxr-xr-x 7 nobody staff 238 7 2 23:14 commander drwxr-xr-x 7 nobody staff 238 7 2 23:14 fis-command-install drwxr-xr-x 11 nobody staff 374 7 2 23:14 fis-command-release drwxr-xr-x 9 nobody staff 306 7 2 23:14 fis-command-server drwxr-xr-x 9 nobody staff 306 7 2 23:14 fis-kernel drwxr-xr-x 8 nobody staff 272 7 2 23:14 fis-optimizer-clean-css drwxr-xr-x 8 nobody staff 272 7 2 23:14 fis-optimizer-png-compressor drwxr-xr-x 8 nobody staff 272 7 2 23:14 fis-optimizer-uglify-js drwxr-xr-x 7 nobody staff 238 7 2 23:14 fis-packager-map drwxr-xr-x 7 nobody staff 238 7 2 23:14 fis-postprocessor-jswrapper drwxr-xr-x 8 nobody staff 272 7 2 23:14 fis-spriter-csssprites 

举个例子:fis-hello

远比想象中要容易,直接看官方文档吧:http://fis.baidu.com/docs/dev/solution.html

对比grunt

经常有人拿grunt、fis进行对比,其实两者并不是同一层面的内容。grunt是前端构建工具,而fis则是前端集成解决方案。

举个不是很恰当的例子,就拿http协议、浏览器的关系来说吧。

  • grunt:制定了http协议,但想要浏览网页,你得先开发个浏览器
  • fis:制定了http协议,同时提供了浏览器。哦,你还可以安装一些扩展。

这里就讲fis相对于grunt的优势吧。

  1. 更贴近前端工程实际(废话)
  2. 更加灵活合理的配置
  3. 更加高效的构建流

写在后面

写得匆忙,如有错漏敬请指出 :)

相关文章
|
11月前
|
存储 弹性计算 网络协议
5 分钟构建企业级域控:AD DS 一键部署与实战指南
Active Directory 域服务(AD DS)不仅是企业级身份管理的基石,更是您实现**集中认证、策略统管、安全高效**IT架构的核心引擎。
|
2月前
|
弹性计算 人工智能 运维
1. 阿里云轻量与 ECS 云服务器省钱攻略,新购续费优惠拆解、活动规则与新老用户选型指南
对于个人开发者、学生、小微企业而言,云服务器的新购价格与长期续费成本,是决定上云方案是否可行的核心因素。很多用户在初次选购服务器时,只关注新购的低价,却忽略续费相关政策,等到实例即将到期,才发现续费价格大幅上涨,业务成本超出预期。 阿里云服务器 的优惠体系分为新购优惠与续费优惠两大板块,轻量应用服务器、ECS弹性云服务器拥有独立的活动规则,低价套餐存在严格的资格、配置、数量限制,一旦操作不当,就会直接失去低价续费资格。
207 0
|
存储 监控 安全
TG7100CWiFi&BLE双模芯片 一键连接AIoT平台让你快速自定义智能方案
面对市面上眼花缭乱的双模芯片,许多应用方案商往往挑花了眼,不知道该选择哪款。今天我们推荐是天猫精灵联合平头哥推出的TG7100CWiFi&BLE双模芯片。它具有低功耗、宽工作温度等特点,广泛适用于智能家居,电工照明等领域。
TG7100CWiFi&BLE双模芯片 一键连接AIoT平台让你快速自定义智能方案
|
10月前
|
人工智能 自然语言处理 搜索推荐
2026年适合中小企业的智能客服系统推荐,轻量化部署+灵活计费
2026年,中小企业智能客服需求聚焦“轻量化、低成本、高适配”。瓴羊Quick Service凭借开箱即用的电商深度集成、93%+意图识别准确率的大模型引擎,及999元/月起的灵活SaaS计费,助力企业降本75%、响应提速至2.1秒,成为数字化转型优选。(239字)
|
安全 BI
AD域迁移:最佳实践与工具指南
在当今动态组织环境中,Active Directory(AD)迁移是关键任务。为确保顺利迁移用户、组和应用程序,需遵循最佳实践:制定详细计划、保障AD安全、解决合规性问题、备份测试恢复及选择合适工具。推荐使用ADManager Plus,这款IGA工具可自动迁移用户、组、GPO等对象,防止数据丢失,提供全面报表与备份恢复功能,支持跨域迁移并避免命名冲突,有效减少手动操作和错误风险,实现高效无缝的AD迁移体验。
895 0
|
关系型数据库 MySQL 数据库连接
mysql从安装到建库,utf8mb4最佳实践,jdbc连接串全解析
mysql从安装到建库,utf8mb4最佳实践,jdbc连接串全解析
5017 0
|
Linux 开发者 Docker
Docker改名啦?什么是 Moby Project
DockerCon上最大的新闻莫过于Solomon Hykes宣布Moby项目了,这也在网上引发了轩然大波,关切和争论纷至沓来。本文将介绍Moby项目的细节以及它和Docker产品之间的关系
22745 0
|
数据可视化 关系型数据库 Linux
开源虚拟化平台oVirt4.3简单搭建实践(上)
开源虚拟化平台oVirt4.3简单搭建实践
2310 0
开源虚拟化平台oVirt4.3简单搭建实践(上)
|
监控 Linux 调度
Swap 分区|学习笔记
快速学习 Swap 分区
Swap 分区|学习笔记
|
测试技术
【UCIe】UCIe PHY 接口信号
【UCIe】UCIe PHY 接口信号
1341 0
【UCIe】UCIe PHY 接口信号