开启ng-strict-di后,AngularJS经Closure Compiler压缩出现Unknown Provider错误
迁移到Google Closure Compiler(WHITESPACE_ONLY模式)的实践分享
我之前一直用grunt-contrib-concat合并项目里所有JS文件,不做压缩的时候代码运行完全正常。最近打算换成Google's Closure Compiler,既能实现代码压缩还能生成源映射,一开始用的参数是:
--compilation_level WHITESPACE_ONLY --formatting=pretty_print
而且我严格保持了和之前grunt任务完全一致的文件传入顺序,按道理应该得到和单纯合并后差不多的输出结果。
这里分享个小细节:我还借助了一些Sublime Text的技巧来辅助这个迁移过程——比如用文件对比插件快速对比编译器输出和原合并文件的差异,或者用内置的语法检查工具快速排查是否有编译器隐性处理的语法细节(比如自动补全遗漏的分号,这在单纯合并时可能没暴露,但编译器会标准化处理)。
如果你们也在做类似的切换,有几个关键点可以留意:
- 哪怕是WHITESPACE_ONLY模式,Closure Compiler也会做一些细微的代码标准化处理,比如统一换行符、补全必要分号,这些小变化可能在依赖严格执行顺序的场景下产生影响,一定要做全量的功能测试。
- 源映射生成要注意路径配置,Closure Compiler的
--create_source_map参数需要指定正确的输出路径,要和最终部署的文件路径对应,不然调试时源映射会失效。 - 文件加载顺序绝对不能乱,尤其是你的代码依赖顺序来保证模块初始化的情况下,必须和之前的合并任务完全对齐,避免出现依赖未定义的报错。
内容的提问来源于stack exchange,提问作者Bancarel Valentin
相关产品推荐
相关产品推荐

