Open hefangshi opened 10 years ago
实现一个fis-plus的配置后果然有一些新的看法,不过还是把我的实现贴出来吧,只实现了主要部分,压缩部分需要包装一下处理压缩开关。
fis.when("**.tpl")
.extlang()
.standard()
.smartyxss()
.htmlcompress()
.dest("/template/${namespace}/$&");
fis.on(/^\/widget\/(.*\.tpl)$/i)
.attr('isMod', true)
.url('${namespace}/widget/$1');
fis.on(/^\/page\/(.+\.tpl)$/i)
.attr({
isMod: true,
extras: {
isPage: true
}
});
fis.when(/^\/widget\/(.*\.js)$/i)
.attr('isMod', true)
.standard()
.jswrapper({
type: 'amd'
})
.requireasync()
.uglifyjs()
.dest("${statics}/${namespace}$&");
fis.when(/^\/widget\/(.*\.css)$/i)
.standard()
.cleancss()
.dest("${statics}/${namespace}$&");
fis.on("**.tmpl")
.attr('isHtmlLike', true)
.standard()
.bdtmpl({
LEFT_DELIMITER : '<#',
RIGHT_DELIMITER : '#>'
})
.attr('isJsLike', true)
.dest(false);
fis.on("**.less")
.less({
ext: "css"
});
fis.when("**")
.dest("${statics}/${namespace}$&");
//以下是FIS自带的基本配置
fis.on("**.js")
.standard()
.uglifyjs();
fis.on("**.css")
.standard()
.cleancss();
fis.on("**.png")
.standard()
.pngcompress();
fis.when(/^\/widget\/(.*\.css)$/i)
.standard()
.cleancss()
.dest("${statics}/${namespace}/css/$&");
无法完备的增加流程规范,但是对于编译属性的添加比较自然
fis.on("/widget/widgetA/a.sass")
.attr("useHash", false)
.sass()
上述这种写法对于增加流程的确弱于以前的扩展点的形式,但是通过一些trick,我们依然可以保留原有的扩展方式
比如依然使用optimize而不是uglifyjs, cleanss,然后根据后缀名进行配置
fis.optimize = fis.extRouter({
"js" : "uglifyjs",
"css": "cleancss",
"tpl": "smartyxss,htmlcompress"
});
fis.when("**.js")
.standard()
.optimize()
.dest();
这样就可以基于后缀名进行统一扩展
无论是pack还是csssprite,我觉得目前配置的效果还不错,上述配置都只是单文件流程的配置,单文件与打包的配合可以后面再考虑,因为这种配置模式只是做一个尝试。
回头来看,也许我们在目前的配置基础上做一些改进
就可以实现上面这些折腾一样的效果了呢?
目前想动配置的主要起因还是
每次FIS后来来的同学都会问
其实,这些都是FIS在成型过程中踩过的一个又一个坑。 就对于第一条,前面由于没有写明具体的版本号引发的问题。如果真的安装到了项目目录,那问题也会出现更多,而且出问题了无从查起。
@fouber 说的第四点也是很重要的,如果不是固定的工具输出,其后续做解决方案就很蛋疼。
配置格式新尝试
目前想法还比较粗略,结果也不是特别满意,仅用于抛砖引玉
示例
前端项目构建
流程外置
类库构建
总结
原则
优点
缺点
核心目标