2014-07-08 27 views
1

对于我Gruntfile.js的concat块:未捕获ReferenceError:未定义angular - 脚本加载顺序?

concat: { 
     options: { 
      stripBanners: false, 
      banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + 
      '<%= grunt.template.today("yyyy-mm-dd") %> */\n' 
     }, 
     production: { 
      files: { 
      './public/js/build/services.js': ['./public/js/services/*.js'], 
      './public/js/build/factories.js': ['./public/js/factories/*.js'], 
      './public/js/build/controllers.js': ['./public/js/controllers/*.js'], 
      './public/js/build/directives.js': ['./public/js/directives/*.js'], 
      './public/js/build/filters.js': ['./public/js/filters/*.js'], 
      './public/js/build/plugins.js': ['./public/js/plugins/*.js'], 
      './public/js/build/modern-angular.js': [ 
       './public/bower_components/jquery/dist/jquery.js', 
       './public/bower_components/angular-stable/angular.js', 
       './public/bower_components/angular-sanitize-stable/angular-sanitize.js' 
      ], 
      './public/js/build/old-angular.js': [ 
       './public/bower_components/jquery-1.11/index.js', 
       './public/bower_components/angular-unstable/angular.js', 
       './public/bower_components/angular-sanitize-unstable/angular-sanitize.js', 
       './public/bower_components/html5shiv/dist/html5shiv.js' 
      ], 
      './public/js/build/app.js': [ 
       './public/js/app.js', 
       './public/js/build/services.js', 
       './public/js/build/factories.js', 
       './public/js/build/controllers.js', 
       './public/js/build/directives.js', 
       './public/js/build/filters.js', 
       './public/js/build/plugins.js' 
      ] 
      } 
     } 
    }, 

正如你可以告诉我Gruntfile.js,我需要支持旧的,过时的浏览器,为此我必须加载两个不同Angular的版本取决于浏览器。

这里是我的index.ejs:

<!doctype html> 
<html lang="en" class="ng-app:idocs" id="ng-app" ng-app="idocs" xmlns:ng="http://angularjs.org"> 
    <head> 

     <!-- Omitting to prevent bloating --> 

     <!--[if lte IE 8]> 
      <script> var olderIE = true; </script> 
     <![endif]--> 

     <script> 
      if (typeof olderIE === 'undefined') { 
       // User is using a modern browser, they're awesome. 
       var script = document.createElement('script'); 
       script.setAttribute('src', '/js/build/modern-angular.js'); 
       document.head.appendChild(script); 
      } 
     </script> 

     <!--[if lte IE 8]> 
      <script src="/js/build/old-angular.js"></script> 
     <![endif]--> 

    </head> 
    <body data-ng-cloak onload="handleTaggerEvent()"> 

     <!-- Again, omitting --> 

     <% if(nodeEnv == 'production') { %> 
      <script src="/js/build/app.js"></script> 
     <% } else { %> 
      <script src="/js/build/controllers.js"></script> 
      <script src="/js/build/directives.js"></script> 
      <script src="/js/build/factories.js"></script> 
      <script src="/js/build/filters.js"></script> 
      <script src="/js/build/plugins.js"></script> 
      <script src="/js/build/templates.js"></script> 
      <script src="/js/app.js"></script> 
     <% } %> 

     <script src="socket.io/socket.io.js"></script> 
     <script> 
      var app = { 
       // Omitting for brevity 
      }; 

      // Socket.io stuff 
     </script> 
    </body> 
</html> 

然后在浏览器中我出现以下错误散落。角出现加载,但角码后剩下:

enter image description here

回答

2

我想是因为你正在加载的控制器,指令,工厂,过滤器和这样你实际上负荷角度文件之前,你所得到的错误。您需要加载角度文件。应该是这个样子:

'./public/js/build/modern-angular.js': [ 
        './public/bower_components/jquery/dist/jquery.js', 
        './public/bower_components/angular-stable/angular.js', 
        './public/bower_components/angular-sanitize-stable/angular-sanitize.js' 
       ],  
'./public/js/build/services.js': ['./public/js/services/*.js'], 
       './public/js/build/factories.js': ['./public/js/factories/*.js'], 
       './public/js/build/controllers.js': ['./public/js/controllers/*.js'], 
       './public/js/build/directives.js': ['./public/js/directives/*.js'], 
       './public/js/build/filters.js': ['./public/js/filters/*.js'], 
       './public/js/build/plugins.js': ['./public/js/plugins/*.js'], 

这将使角度稳定/ angular.js文件,因为你的角度文件第二次后加载的所有文件其他files.Your以前的版本加载之前加载。尝试删除其中的一个副本:

 './public/js/build/app.js': [ 
      './public/js/app.js', 
      './public/js/build/services.js', 
      './public/js/build/factories.js', 
      './public/js/build/controllers.js', 
      './public/js/build/directives.js', 
      './public/js/build/filters.js', 
      './public/js/build/plugins.js' 
     ] 

这应该有效。

+0

我很困惑如何切换的哪些文件通过CONCAT产生,同时运行的呼噜声会影响在浏览器的脚本的加载顺序的顺序。另外,当你说“其中一份”时,你指的是什么? './ public/js/build/app.js'是concat中该文件的唯一发生。 – Scott

+0

从代码看来,'./public/js/build/*'文件是在angular docs之前和之后创建的。我相信角度文档之前的那些人正在创建错误,因为浏览器顺序需要类似于:jquery,angular,angular-sanitize,app.js,工厂 - 过滤器。 – Maximus

0

脚本标签前加入这两个线路

<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script> 
相关问题