百度前端团队搞了一个叫fis(http://fis.baidu.com/)的构建工具,逐步被很多团队使用,例如腾讯内部有些项目就是用fis构建了。fis相对grunt等构建工具而言,更加简单易用,并且提供了完整的解决方案。缺点就是bug很多,出现问题往往只能通过看源码来解决。总的来讲,fis还是值得一试的。
前端已经逐渐摆脱面条式编码的过去了,如果现在的新项目还是面条式的js代码,那么实在对不住时代的发展。模块化开发应该成为前端主要的构架方式,在当前的项目我都是使用requirejs帮助实现模块化,但是模块化开发的问题是文件零碎,会产生大量的http请求,所以发布的时候一定要打包。自从使用fis之后,我一直在折腾优雅的AMD打包,走了很多弯路,终于整了一个比较舒服的方式,跟大家分享一下。
下面的配置是AMD模块的基本配置。fis3之后是通过一个叫fis3-hook-amd的插件帮助实现AMD。首先helpers, libs, services文件夹里面的文件应该被打包到一个文件当中。
// 采用 AMD 规范支持模块化组建开发
fis.hook('amd', {
baseUrl:'.',
// paths: map.app,
packages: [
{
name: 'helpers',
location: './helpers',
main: 'helpers.js'
},
{
name: 'libs',
location: './libs',
main: 'libs.js'
},
{
name: 'app',
location: './modules/application',
main: 'app.js'
},
{
name: 'services',
location: './services',
main: 'services.js'
}
]
});
plugins 文件夹当然配置成非AMD模式,否则会导致很多问题的。
fis.match('/plugins/**.js', {
isMod: false
});
然后是最终打包的配置,把map独立到一个叫map.js的文件
fis.match('::package', {
postpackager: fis.plugin('loader', {
resourceType: 'amd',
// allInOne: true,
useInlineMap: false,
resoucemap: '/map.js',
include: [
'/modules/application/**.js'
]
})
});
上述打包方式还有需要优化的地方,待稳定之后再更新到github.