concat和uglify之间的区别是什么?

mhe*_*ers 56 concatenation minify uglifyjs gruntjs

在grunt中concat,uglify和minify任务之间有什么区别?我为我所有网站的javascript任务设置了一个uglify任务,它似乎都缩小并连接它们.Grunt的网站对如何配置每个任务有很好的描述,但似乎并没有解释每个任务实际上做了什么.

小智 105

  • 连接只是将所有静态文件附加到一个大文件中.

  • 缩小只是删除不必要的空格和冗余/可选标记,如卷曲和分号,并且可以通过使用linter来反转.

  • Uglification是将代码转换为"不可读"形式的行为,即重命名变量/函数以隐藏原始意图......它也是不可逆转的.

  • 鉴于uglify grunt任务可以执行concat,你知道为什么yeoman生成器在uglifying之前运行grunt concat任务吗? (13认同)
  • 这个问题代表了对concat和uglifying之间区别的误解.将两个或多个文件连接在一起时,将创建一个新文件.如果你在concating之前尝试uglify那么你需要uglify n个文件然后连接所有这些文件.将它们连接起来然后在集合文件上运行uglify会更有效率.tldr; 运行uglify后,concat使它只需要运行uglify 1次而不是n次 (12认同)
  • Uglification不一定是"隐藏意图",它可能只是用于节省空间,将aLongMethodName()转换为()和变量名称以及缩短版本. (6认同)
  • 嗯,不仅如此。想象一下从另一个js文件调用的库文件,如果你先分别丑化这些文件,然后将它们连接起来,你的js文件将不再能够引用该库,因为库中的名称将被更改。所以先连接所有内容,然后丑化结果。 (4认同)

小智 13

连接 - 合并所有指定的文件以创建新的单个文件.

缩小 - 它只是意味着将删除所有不必要的空格和冗余的可选标记.

示例 - self.description ='Hello'缩小版将为 - self.description ='Hello'

丑化 - 它只是意味着以一种核心逻辑无法轻易理解的格式转换代码.为了做同样的事情,它重命名变量及其引用,它用较短的名称重命名参数等.它简单地模糊了业务逻辑,以便没有人能够轻易地理解它.

示例 -

self.description = 'Hello';
function(self.description){}
Run Code Online (Sandbox Code Playgroud)

Uglified版本将 -

  j.description = 'Hello';
  function(j.description){}
Run Code Online (Sandbox Code Playgroud)