1. 程式人生 > >fis3配置(附package.json)

fis3配置(附package.json)

filter push 通用 前端 esc 指定 get ios 去掉

大部分來自 https://github.com/yanhaijing/fis3-base 裏的原生配置, 新增部分為舍棄了fis3的component 換為node_modules, 去掉了一些自己不怎麽用的功能

// 設置項目屬性
fis.set(‘project.name‘, ‘fis3-base‘);
fis.set(‘project.static‘, ‘/static‘);
fis.set(‘project.files‘, [‘*.html‘, ‘map.json‘, ‘/test/*‘]);

// 引入模塊化開發插件,設置規範為 commonJs 規範。

fis.hook(‘commonjs‘, {
    baseUrl: ‘./modules‘,
    extList: [‘.js‘, ‘.es‘]
});

// 不使用fis3的component 使用插件fis3-hook-node_modules把插件依賴轉為node_modules
fis.unhook(‘components‘)
fis.hook(‘node_modules‘)

fis.match(‘/{node_modules}/**.js‘, {
    isMod: true,
    useSameNameRequire: true
});

/*************************目錄規範*****************************/

// 開啟同名依賴, 同名模板依賴nui同名js跟css
fis.match(‘/modules/**‘, {
    useSameNameRequire: true
});

// ------ 全局配置
// 允許你在 js 中直接 require css+文件
fis.match(‘*.{js,es}‘, {
    preprocessor: [
        fis.plugin(‘js-require-file‘),
        fis.plugin(‘js-require-css‘, {
            mode: ‘dependency‘
        })
    ]
});

// 配置圖片壓縮
fis.match(‘**.png‘, {
    optimizer: fis.plugin(‘png-compressor‘, {
        type: ‘pngquant‘
    })
});


// ------ 配置lib
fis.match(‘/lib/**.js‘, {
    release: ‘${project.static}/$&‘
});

// ------ 配置modules
fis.match(‘/modules/(**)‘, {
    release: ‘${project.static}/$1‘
})

// 配置css
//fis.match(/^\/modules\/(.*\.scss)$/i, {
//  parser: fis.plugin(‘sass‘, {
//      include_paths: [‘modules/css‘, ‘components‘] // 加入文件查找目錄
//  })
//});
fis.match(/^\/modules\/(.*\.less)$/i, {
    parser: fis.plugin(‘less‘, {
        paths: []
    })
});
fis.match(/^\/modules\/(.*\.(scss|less|css))$/i, {
    rExt: ‘.css‘,
    isMod: true,
    release: ‘${project.static}/$1‘,
    postprocessor: fis.plugin(‘autoprefixer‘, {
        browsers: [‘IE >= 8‘, ‘Chrome >= 30‘, ‘last 2 versions‘] // pc
            // browsers: [‘Android >= 4‘, ‘ChromeAndroid > 1%‘, ‘iOS >= 6‘] // wap
    })
});
fis.match(/^\/modules\/(.*\.(?:png|jpg|gif))$/i, {
    release: ‘${project.static}/$1‘
});

// 配置js
fis.match(/^\/modules\/(.*\.js)$/i, {
    parser: fis.plugin(‘babel-5.x‘),
    rExt: ‘js‘,
    isMod: true,
    release: ‘${project.static}/$1‘
});
fis.match(/^\/modules\/(.*\.js)$/i, {
    isMod: true,
    release: ‘${project.static}/$1‘
});


// ------ 配置前端模版 使用template.js
//fis.match(‘**.tmpl‘, {
//  parser: fis.plugin(‘template‘, {
//      sTag: ‘<#‘,
//      eTag: ‘#>‘,
//      global: ‘template‘
//  }),
//  isJsLike: true,
//  release: false
//});


// ------ 配置模擬數據
fis.match(‘/test/**‘, {
    release: ‘$0‘
});
fis.match(‘/test/server.conf‘, {
    release: ‘/config/server.conf‘
});


/*************************打包規範*****************************/

// 因為是純前端項目,依賴不能自斷被加載進來,所以這裏需要借助一個 loader 來完成,
// 註意:與後端結合的項目不需要此插件!!!
fis.match(‘::package‘, {
    // npm install [-g] fis3-postpackager-loader
    // 分析 __RESOURCE_MAP__ 結構,來解決資源加載問題
    postpackager: fis.plugin(‘loader‘, {
        resourceType: ‘commonJs‘,
        useInlineMap: true // 資源映射表內嵌
    })
});

// debug後綴 不會壓縮
var map = {
    ‘rd‘: { // 項目發布到指定機器
        host: ‘‘,
        path: ‘‘
    },
    ‘rd-debug‘: { // 查看發布到指定機器的項目的情況(無壓縮版本)
        host: ‘‘,
        path: ‘‘
    },
    ‘prod‘: {  // 發布項目
        host: ‘‘,
        path: ‘/${project.name}‘
    },
    ‘prod-debug‘: {  //查看發布項目的情況(無壓縮版本)
        host: ‘‘,
        path: ‘‘
    }
};

// 通用 1.替換url前綴 2.添加mr5碼 3.打包 4.合圖 5.重新定義資源路徑
Object.keys(map).forEach(function(v) {
    var o = map[v];
    var domain = o.host + o.path;

    fis.media(v)
        .match(‘**.{es,js}‘, {
            useHash: true,
            domain: domain
        })
        .match(‘**.{scss,less,css}‘, {
            useSprite: true,
            useHash: true,
            domain: domain
        })
        .match(‘::image‘, {
            useHash: true,
            domain: domain
        })
        .match(‘**/(*_{x,y,z}.png)‘, {
            release: ‘/pkg/$1‘
        })
        // 啟用打包插件,必須匹配 ::package
        .match(‘::package‘, {
            spriter: fis.plugin(‘csssprites‘, {
                layout: ‘matrix‘,
                // scale: 0.5, // 移動端二倍圖用
                margin: ‘10‘
            }),
            postpackager: fis.plugin(‘loader‘, {
                allInOne: true,
            })
        })
        .match(‘/lib/es5-{shim,sham}.js‘, {
            packTo: ‘/pkg/es5-shim.js‘
        })
        .match(‘/components/**.css‘, {
            packTo: ‘/pkg/components.css‘
        })
        .match(‘/components/**.js‘, {
            packTo: ‘/pkg/components.js‘
        })
        .match(‘/modules/**.{scss,less,css}‘, {
            packTo: ‘/pkg/modules.css‘
        })
        .match(‘/modules/css/**.{scss,less,css}‘, {
            packTo: ‘‘
        })
        .match(‘/modules/css/common.scss‘, {
            packTo: ‘/pkg/common.css‘
        })
        .match(‘/modules/**.{es,js}‘, {
            packTo: ‘/pkg/modules.js‘
        })
        .match(‘/modules/app/**.{es,js}‘, {
            packTo: ‘/pkg/aio.js‘
        })
        // 為了上線方便,將靜態文件發布到同一個目錄
        // .match(‘**/(*.{css,less,scss,es,js,jpg,png,gif})‘, {
        //     release: ‘/prod/$1‘
        // })
});


// 壓縮css js html
Object.keys(map)
    .filter(function(v) {
        return v.indexOf(‘debug‘) < 0
    })
    .forEach(function(v) {
        fis.media(v)
            .match(‘**.{es,js}‘, {
                optimizer: fis.plugin(‘uglify-js‘)
            })
            .match(‘**.{scss,less,css}‘, {
                optimizer: fis.plugin(‘clean-css‘, {
                    ‘keepBreaks‘: true //保持一個規則一個換行
                })
            });
    });

// 本地產出發布
fis.media(‘prod‘)
    .match(‘**‘, {
        deploy: [
            fis.plugin(‘skip-packed‘, {
                // 默認被打包了 js 和 css 以及被 css sprite 合並了的圖片都會在這過濾掉,
                // 但是如果這些文件滿足下面的規則,則依然不過濾
                ignore: []
            }),

            fis.plugin(‘local-deliver‘, {
                to: ‘output‘
            })
        ]
    });


// 發布到指定的機器
//[‘rd‘, ‘rd-debug‘].forEach(function(v) {
//  fis.media(v)
//      .match(‘*‘, {
//          deploy: [
//              fis.plugin(‘skip-packed‘, {
//                  // 默認被打包了 js 和 css 以及被 css sprite 合並了的圖片都會在這過濾掉,
//                  // 但是如果這些文件滿足下面的規則,則依然不過濾
//                  ignore: []
//              }),
//              fis.plugin(‘http-push‘, {
//                  receiver: ‘xxx/fisreceiver.php‘,
//                  to: ‘xxx/‘ + fis.get(‘project.name‘)
//              })
//          ]
//      });
//});

  

package.json

{
  "name": "",
  "version": "",
  "description": "",
  "repository": {
    "type": "git",
    "url": ""
  },
  "devDependencies": {
    "fis-parser-babel-5.x": "^1.4.0",
    "fis-parser-less": "^0.1.3",
    "fis-parser-template": "^0.3.3",
    "fis-postprocessor-autoprefixer": "0.0.5",
    "fis3-deploy-skip-packed": "0.0.5",
    "fis3-hook-commonjs": "^0.1.26",
    "fis3-hook-node_modules": "^2.2.8",
    "fis3-postpackager-loader": "^2.1.4",
    "fis3-postprocessor-autoprefixer": "^1.0.0",
    "fis3-preprocessor-js-require-css": "^0.1.1",
    "fis3-preprocessor-js-require-file": "^0.1.3"
  }
}

  

fis3配置(附package.json)