Fis3前端工程化之项目实战

Fis3项目


项目目录结构:javascript

E:.
│  .gitignore
│  fis-conf.js
│  index.html
│  package.json
│  README.md
│
├─material
│
└─resource
    ├─css
    ├─images
    └─js
        ├─lab
        │  │
        │  └─until
        └─ui

项目要求:css

1.雪碧图html

2.代码模块化java

3.预处理jquery

4.md5戳git

5.压缩资源npm

雪碧图


启用雪碧图插件,fis3已内置json

fis.match('::package', {
  spriter: fis.plugin('csssprites')
})

设置雪碧图的合并格式bash

fis.config.set('settings.spriter.csssprites', {
  margin: 10, //图之间的边距
  layout: 'matrix' //使用矩阵排列方式,默认为线性`linear`
});

预处理


由于使用的是less,因此须要预处理less文件less

经过fis-parser-less插件能够处理

安装npm install -g fis-parser-less

fis.match('*.less', {
  parser: fis.plugin('less'),
  rExt: '.css'
})

代码模块化


Mod.js

我这里使用的Mode.js,这个百度开发的一个独立的模块化库。

包裹JS

除了mode.js之外咱们还须要npm install -g fis-hook-commonjs来安装一个模块化"包裹"库。

它的做用就是将咱们的js代码外面包裹一层,好比咱们经常使用的:jquery.lazyload

经过fis-hook-commonjs包裹后:

define('resource/js/lab/jquery.lazyload', function(require, exports, module) {
    //jquery.lazyload代码
});

而后经过require('resource/js/lab/jquery.lazyload')这种形式就能够加载咱们须要的库了。

设置是否包裹

固然这里咱们能够经过fis-conf.js来控制须要包裹的js。

//指定目录文件进行define包裹
fis.match('/resource/js/lab/**.js', {
  isMod: true
})

经过isMode这个属性便可,true意为包裹,false意为不包裹。

添加别名(谨慎使用)

固然经常使用的jquery的话,咱们能够经过下面这种设置来添加别名等。

fis.hook('commonjs')
  .match('/resource/js/lab/jquery.js', {
    id: 'jquery'
  })

调用var $=require('jquery')

控制打包顺序

//设置mod.js的优先级在打包文件的第一位
fis.match('/resource/js/lab/mod.js', {
  packOrder: -100
})

这里是经过packOrder来处理打包的顺序,值越小打包越靠前。-100比-99靠前。

资源合并

资源合并是咱们经常使用的功能,这里我经过安装npm install fis3-postpackager-loader这个库来处理静态文件文件的资源配置。

他会对页面的js,css进行扫描,处理咱们须要的文件。

好比咱们不想将jquery文件合并,咱们能够在html页面中这么处理。

<script type="text/javascript" src="../resource/js/lab/until/interactive.js"></script><!--ignore-->

添加<!--ignore-->这个标记便可。

这样页面的这个文件就不会被处理了。

启用fis3-postpackager-loader

fis.match('::package', {
  postpackager: fis.plugin('loader')
});

咱们的html文件会引入多个js,css。这样的话咱们会将他们合并成单个文件,提升性能。

<script type="text/javascript" src="../resource/js/lab/until/interactive.js"></script>
    <script type="text/javascript" src="../resource/js/lab/until/tabchange.js"></script>
    <script type="text/javascript" src="../resource/js/ui/swip.js"></script>
    <script type="text/javascript" src="../resource/js/ui/tab.js"></script>
    <script type="text/javascript" src="../resource/js/ui/main.js"></script>

经过下面配置处理

//静态资源加载器配置 npm install fis3-postpackager-loader
//不想加载的引入资源使用<!--ignore-->标记
//合并页面js
//不进行任何配置 css,js的合并使用fis的pack
fis.match('::package', {
  postpackager: fis.plugin('loader')
});

//对合并的aio.css进行处理 打包的会自动进行csssprites
fis.config.set('pack', {
  '/static/js/index_aio.js': [
    '**.js'
  ],
  '/static/css/index_aio.css': [
    '**.css',
    '**.less'
  ]
});

这样处理打包后的static目录下状况:

├─css
│      index_aio.css
│      index_aio_z.png
│
└─js
        index_aio.js

md5戳


给js,css添加md5戳,使用useHash

fis.media('prod')
  .match('/static/**.{css,js}', {
    useHash: true
  })

压缩资源


fis.media('prod')
  .match('/resource/**.js', {
    optimizer: fis.plugin('uglify-js')
  })
  .match('/resource/**.{css,less}', {
   optimizer: fis.plugin('clean-css')
  })
  .match('/static/**.png', {
    optimizer: fis.plugin('png-compressor')
  })

将js,css,png进行压缩。压缩器fis3已内置,不须要安装库。

最后


注意fis3的配置文件中的操做顺序会影响你须要的结果

相关文章
相关标签/搜索