项目目录结构: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' })
我这里使用的Mode.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
给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的配置文件中的操做顺序会影响你须要的结果