項目目錄結構: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的配置文件中的操做順序會影響你須要的結果