yqb
Version:
Static Package Manager
215 lines (207 loc) • 5.41 kB
JavaScript
/*
* fis3 构建配置文件
* author: <%= author %>
* version: <%= version %>
*/
var appName = '<%= name %>', // 项目名
debugDeployDirectory = 'deployed', // debug产出代码目录
compileDeployDirectory = '../../webroot/activity/h5'; // 产线产出目录
fis.util.mkdir(debugDeployDirectory);
/*
* 配置建构过程包含的资源文件
*/
// 源码包含设置
fis.config.set('project.files', [
'*.html',
'framework/**',
'app/**',
'favicon.ico'
]);
// 源码排除设置
fis.config.set('project.ignore', [
'framework/bower_components/**',
'node_modules/**',
debugDeployDirectory + '/**'
]);
/*
* 配置文件编译策略
* 使用如下fis插件
*/
fis
.match("**", {
release: appName + '/$0'
})
// 设置less的编译
// 注: 配置该插件后,本地的sublime可以不用安装lesstocss插件,建议直接编辑less文件,使用less的扩展动态语法
.match('**.less', {
parser: fis.plugin('less'),
rExt: '.css'
})
// es6
.match('app/js/*.js', {
parser: fis.plugin('es6-babel'),
rExt: '.js'
})
.match('framework/download/download.es', {
parser: fis.plugin('es6-babel'),
rExt: '.js'
})
.match('framework/dialog/dialog.es', {
parser: fis.plugin('es6-babel'),
rExt: '.js'
})
.match('framework/system/enviroment.es', {
parser: fis.plugin('es6-babel'),
rExt: '.js'
})
.match('framework/paf/ajax.js', {
parser: fis.plugin('es6-babel'),
rExt: '.js'
})
// 静态资源优化插件
.match('*.js', {
// fis-optimizer-uglify-js 插件进行压缩,已内置
optimizer: fis.plugin('uglify-js')
}).match('{*.less,*.css}', {
// fis-optimizer-clean-css 插件进行压缩,已内置
optimizer: fis.plugin('clean-css')
}).match('*.png', {
// fis-optimizer-png-compressor 插件进行压缩,已内置
optimizer: fis.plugin('png-compressor', {
type: 'pngquant' //default is pngcrush
})
})
// 配置相对路径的插件,调整所有静态资源引用为相对路径引用
.hook('relative')
.match('**', {
relative: true
})
.match('/*.html', {
relative: '/' + appName // 调整为基于页面地址的相对路径
})
.match('*.js', {
relative: '/' + appName // 调整为基于页面地址的相对路径
})
// 为了保持对外访问入口页面url不变,即排除入口html页面的md5后缀设置
.match('**', {
useHash: true
})
.match('*.html', {
useHash: false
});
/*
* 配置合并打包策略
*/
var seajs = 'node_modules/seajs/dist/sea.js';
var jquery = 'node_modules/jquery/dist/jquery.js';
var zepto = 'node_modules/zepto/zepto.min.js';
var reset = 'node_modules/reset.css/reset.css';
var animate = 'node_modules/animate.css/animate.css';
fis
// 框架层合并配置: framework.js、 framework.css
.match(jquery, {
packTo: 'framework/framework.js'
})
// .match(zepto, {
// packTo: 'framework/zepto.js'
// })
.match('framework/css/base.css', {
packTo: 'framework/framework.css'
})
.match(reset, {
packTo: 'framework/framework.css'
})
// .match(animate, {
// packTo: 'framework/animate.css'
// })
// .match('framework/css/button.css', {
// packTo: 'framework/framework.css'
// })
// .match('framework/paf/pafui.css', {
// packTo: 'framework/framework.css'
// })
.match('framework/paf/ajax.js', {
packTo: 'framework/paf.js'
})
// 组件层合并配置: component.js、 component.css
.match('framework/webCollection/webCollection.js', {
packTo: 'framework/component.js'
})
// .match('framework/system/enviroment.js', {
// packTo: 'framework/component.js'
// })
// .match('framework/register/otp.js', {
// packTo: 'framework/component.js'
// })
// .match('framework/register/register.css', {
// packTo: 'framework/component.css'
// })
.match('framework/dialog/dialog.css', {
packTo: 'framework/component.css'
})
.match('framework/dialog/dialog.js', {
packTo: 'framework/component.js'
})
.match('framework/tips/tips.css', {
packTo: 'framework/component.css'
})
.match('framework/tips/tips.js', {
packTo: 'framework/component.js'
})
.match('framework/share/share.css', {
packTo: 'framework/component.css'
})
.match('framework/share/jquery.qrcode.min.js', {
packTo: 'framework/component.js'
})
.match('framework/share/share.js', {
packTo: 'framework/component.js'
})
.match('framework/download/download.js', {
packTo: 'framework/component.js'
})
// ----------------------------------
// 应用层合并配置:app.js、 app.css
// 自动替换合并文件的插件
.match('::packager', {
postpackager: fis.plugin('loader', {
allInOne: true
})
});
/*
* 在各不同环境下不同的文件编译配置及deploy策略
*/
var deploySelector = '{framework/*.css,framework/*.js,framework/images/**,app/images/**,app/js/**,app/css/**,*.html,*.ico}';
// 本地环境不混淆静态资源
fis.media('dev')
.match('*.js', {
optimizer: null
}).match('{*.less,*.css}', {
optimizer: null
}).match('*.html', {
optimizer: null
})
// 本地联调部署在{debugDeployDirectory}目录
.match(deploySelector, {
deploy: [
fis.plugin('local-deliver', {
to: debugDeployDirectory
})
]
});
// 测试环境需要打成zip包
fis.media('build')
.match('*.izip', {
useHash: false,
release: '$0'
})
.match(deploySelector, {
deploy: [
fis.plugin('zip', {
filename: appName + '.izip'
}),
fis.plugin('local-deliver', {
to: compileDeployDirectory
})
]
});