2016-11-16 55 views
3

我想部署一个meanjs项目,但似乎无法弄清楚如何缩小,concat & uglify项目使用grunt。如何使用grunt uglify角度项目?

什么我发现了迄今:

  1. 需要CONCAT ->运行ngAnnotate ->丑化(否则代码将无法运行)
  2. 需要在依赖以CONCAT(否则它赢得't运行)

有了这个逻辑,我设法创建了一个单一的'uglified'版本的相关第三方库(节点模块),但我无法对模块做同样的事情,已经写了。

我试过使用应该根据依赖关系重新排列文件的concat工具(grunt-concat-in-order,grunt-concat-dependencies,grunt-concat-deps),但没有任何帮助。只是缺少模块/声明的错误。

我试过对应该连接的js文件进行重新排序,每次都有其他东西丢失,并且网站部分加载(最好)。 根据它们在编译头中出现的顺序对文件重新排序不会有帮助。

是否有东西根据它们的依赖性或者我应该对其重新排序的一般逻辑连接Angular文件?

谢谢。

回答

1

找到了!显然,JS和Angular灵活且缺少';'在模块/指令声明的最后。 我已经浏览了整个代码并添加了缺失的';'在适当的地方。

例如:

angular.module('core').filter('xyz', [function() { 
    ..... 
}]) 

终于可以去睡觉了。

*原帖: Angular module().factory() is not a function after concat (gulp)(欢呼最大值亚日)

0

首先要检查的是,实际上在代码中随处可见使用DI模式,因为函数参数将在uglification期间被替换,因此不会再解析。

ControllerName.$inject = ['component'] 

或者

angular.module('module') 
    .controller(['module', function (module) { /*... */}) ; 

当你这样做,请检查您是否可以明确地指定文件顺序是这样的(伪代码):

['module1_decl_file.js','module2_decl_file.js', '*.js','**/*.js']

+0

感谢您的输入, 通过“明确的指定文件顺序”你的意思是在这些文件被连接起来的顺序?我推测concat函数按我写的顺序添加文件。 – Daniel

+0

它应该,是的。我还没有尝试完全使用你使用的库,但吞咽连接和类似。你有没有尝试连接它,而不是提高只是为了验证订单?这可能是一个uglification参数替换错误。您的使用案例绝不是唯一的,可能是人们使用它的最常见方式。 –

+0

好吧, 我试过包括连接文件(没有ngannotate/uglify版本),但它是一样的...意思是顺序是问题。 – Daniel