如果您检查您的被压缩的JS代码,您会发现代码虽然被压缩了,但是你包含的每个JS库在顶部都有其自己的版权和许可信息(这是正确的),就像下面这段代码片段:
如果您真的想要在Rails应用中实现完全最小化,并摆脱PageSpeed Insights的2%额外压缩通知,您可以通过以下设置实现:
config.assets.js_compressor = Uglifier.new(copyright: false)
或者
config.assets.js_compressor = Uglifier.new(output: { comments: :none })
注意1:以上两者都将删除你的application.js中的所有注释。
注意2:同时使用这两个设置,Uglifier会从你的压缩js中去除所有版权信息,因此你的应用程序可以实现谷歌PageSpeed所需的完全压缩,并且你获得+1分的分数。
然而,你不应该避免包含你正在使用的代码的版权信息。大多数许可证(MIT、BSD、GPL等)要求在重新分发库时保留版权和许可信息。当你允许浏览器从你的服务器或CDN下载库的压缩副本时,这被视为你再次分发该库。 因此,你应该在你的应用程序中某个地方包括版权和许可信息。
如何操作
你可以做的一件事是收集你在应用程序中使用的js库的所有版权信息,并将它们全部添加到一个licenses.txt文件中,放置在你的public文件夹下。你的public/licenses.txt应该像以下内容:
[...and the rest copyrights here one after the other]
然后通过使用链接标签在应用程序的HTML头部(layouts/application.html)指定该文件的位置:
<head>
<!
<link rel="license" href="../licenses.txt">
</head>
rel=license表示:当前文档的主要内容受引用文档所描述的版权许可证保护。
最后,如果您想更加准确地处理这个问题,您应该在缩小后的application.js文件中只包含一条注释,以便让某人精确定位所有版权信息(以防万一..)。为此,请在您的application.js文件顶部添加以下注释:
/*!LC
* Copyright and Licenses: http://www.example.com/licenses.txt
*/
因此,您的application.js可能如下所示:
/*!LC
* Copyright and Licenses: http://www.example.com/licenses.txt
*/
//= require jquery
//= require jquery_ujs
//= [..rest of your requires]
注意: 我已在开头加上!LC以区分这个注释。您需要添加一个正则表达式(regexp)给代码压缩器以使其只允许在压缩后的js文件中包含这个注释。为此,请转到production.rb文件并添加以下内容:
config.assets.js_compressor = Uglifier.new(output: { comments: /^!LC/ })
Uglifier只允许在您的压缩JS文件顶部有一个!LC注释,这样您就不会因为只有一个注释而获得pagespeed insights上的警告。如果您按照所有这些做,您将完全符合pagespeed insights的要求,实现最佳交付的压缩.js,并将所有版权问题整理到一个地方以供任何法律问题。