fex-team / fis

Front-end Integrated Solution - 前端集成解决方案, 最新版请进入 FIS3 https://github.com/fex-team/fis3
http://fis.baidu.com
MIT License
2.96k stars 654 forks source link

fis 在压缩时的规则是怎么样的? #374

Open einsitang opened 9 years ago

einsitang commented 9 years ago

我执行fis release -op 的时候,它不会根据html文档中引入的js内容进行压缩,而是扫描整个目录下的js进行压缩吗?因为它扫描到我的一些node_modules下的工具js,导致出错。

oxUnd commented 9 years ago

项目目录下未 exclude & useOptimizer: true 的资源都会做压缩,不是从一个 html 扫描需要哪些文件。

你想想,如果从一个 html 扫描出某些文件的话,如果文件路径是个变量怎么办?

比如

<img src="<?=$img_src?>" />
einsitang commented 9 years ago

但是他在压缩的时候却无法定义哪些压缩哪些不压缩?有一些是前端工具的js或者是一个项目的库(重复)也进行压缩了

oxUnd commented 9 years ago

所以,fis 提供了把无意义的资源 exclude 的方法,参见 https://github.com/fex-team/fis/wiki/%E9%85%8D%E7%BD%AEAPI#projectexcludehttps://github.com/fex-team/fis/wiki/%E9%85%8D%E7%BD%AEAPI#roadmappath

einsitang commented 9 years ago

@xiangshouding 我的项目使用bower引入库,但每一个库的项目结构的命名格式不一样,能否直接选择需要压缩的资源而不是排除的资源呢?

oxUnd commented 9 years ago

暂时不能

einsitang commented 9 years ago

谢谢 @xiangshouding 能否将这个需求加入这个项目的改进清单呢,类似的需求应该不少吧?

另外我觉得,既然fis能强悍到修改html文档里面的资源引用,他应该优先扫描文档的引用节点,然后再根据这些引用匹配规则再进行编译,因为既然修改了文档,那么肯定也要做文档的解析,解析完毕后再对这部分使用的资源匹配fis的配置再进行查找文件和编译,不会比扫描整个目录效率要差吧。

另外你提及到的,资源是变量的时候怎么办

<img src="<?=$img_src?>" />

像这类的写法本来就不适合应用到所有前端工具,也不需要前端工具去合并,比如

$assets_server = 'http://xxx'
$js_lib = $assets_server.'/assets/'
<script src="<?$js_lib?>/lib1.js"></script>
<script src="<?$js_lib?>/lib2.js"></script>

如果前端工具按照目录压缩和合并的话,这里也不会修改,还是得人手工修改里面的数据

<script src="<?$js_lib?>/lib_all.js"></script>