2013-11-20 10 views
7

po uruchomieniu build z folderu /dist uzyskać:kątowa grunt build (od Yeoman) łamie mi aplikację

Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.2.1/$injector/modulerr?p0=ourname&p1=Error%3A…(http%3A%2F%2Flocalhost%3A8085%2Flib%2Fangular%2Fangular.min.js%3A32%3A462) 

nic zrobić, wydaje się rozwiązać ten problem

to jest przepływ zadanie grunt - przystosowane 1 do 1 z Yeoman kątowej generatora:

module.exports = function(grunt){ 
    require('load-grunt-tasks')(grunt); 
    require('time-grunt')(grunt); 

    grunt.initConfig({ 
     //pkg: grunt.file.readJSON('package.json'), 
     yeoman: { 
      // configurable paths 
      app: require('./bower.json').appPath || 'app', 
      dist: 'dist' 
     }, 
     coveralls:{ 
     options:{ 
      coverage_dir:'coverage' 
     } 
     }, 
     jshint:{ 
      files:['app/js/**/*.js', 'Gruntfile.js'], 
      options:grunt.file.readJSON('.jshintrc') 


     }, 
     watch:{ 
      styles: { 
       files: ['<%= yeoman.app %>/css/{,*/}*.css'], 
       tasks: ['copy:css', 'autoprefixer'] 
      }, 
      livereload: { 
       options: { 
        livereload: '<%= connect.options.livereload %>' 
       }, 
       files: [ 
        '<%= yeoman.app %>/{,*/}*.html', 
        '.tmp/css/{,*/}*.css', 
        '{.tmp,<%= yeoman.app %>}/js/{,*/}*.js', 
        '<%= yeoman.app %>/img/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' 
       ] 
      } 
     }, 
     autoprefixer: { 
      options: ['last 1 version'], 
      dist: { 
       files: [{ 
        expand: true, 
        cwd: '.tmp/styles/', 
        src: '{,*/}*.css', 
        dest: '.tmp/styles/' 
       }] 
      } 
     }, 
     connect: { 
      options: { 
       port: 9000, 
       // Change this to '0.0.0.0' to access the server from outside. 
       hostname: 'localhost', 
       livereload: 35729 
      }, 
      livereload: { 
       options: { 
        open: true, 
        base: [ 
         '.tmp', 
         '<%= yeoman.app %>' 
        ] 
       } 
      }, 
      test: { 
       options: { 
        port: 9001, 
        base: [ 
         '.tmp', 
         'test', 
         '<%= yeoman.app %>' 
        ] 
       } 
      }, 
      dist: { 
       options: { 
        base: '<%= yeoman.dist %>' 
       } 
      } 
     }, 
     clean: { 
      dist: { 
       files: [{ 
        dot: true, 
        src: [ 
         '.tmp', 
         '<%= yeoman.dist %>/*', 
         '!<%= yeoman.dist %>/.git*' 
        ] 
       }] 
      }, 
//   server: '.tmp' 
     }, 
      rev: { 
       dist: { 
        files: { 
         src: [ 
          '<%= yeoman.dist %>/js/{,*/}*.js', 
          '<%= yeoman.dist %>/css/{,*/}*.css', 
          '<%= yeoman.dist %>/img/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
          '<%= yeoman.dist %>/css/fonts/*' 
         ] 
        } 
       } 
      }, 
      useminPrepare: { 
       html: '<%= yeoman.app %>/index.html', 
       options: { 
        dest: '<%= yeoman.dist %>', 
        html: { 
         steps: {'js': ['concat','ngmin']}, 
         post: {} 
        } 
       } 
      }, 
      usemin: { 
       html: ['<%= yeoman.dist %>/{,*/}*.html'], 
       css: ['<%= yeoman.dist %>/css/{,*/}*.css'], 
       options: { 
        assetsDirs: ['<%= yeoman.dist %>'] 
       } 
      }, 
      imagemin: { 
       dist: { 
        files: [{ 
         expand: true, 
         cwd: '<%= yeoman.app %>/img', 
         src: '{,*/}*.{png,jpg,jpeg}', 
         dest: '<%= yeoman.dist %>/img' 
        }] 
       } 
      }, 
      svgmin: { 
       dist: { 
        files: [{ 
         expand: true, 
         cwd: '<%= yeoman.app %>/img', 
         src: '{,*/}*.svg', 
         dest: '<%= yeoman.dist %>/img' 
        }] 
       } 
      }, 
      cssmin: { 
       // By default, your `index.html` <!-- Usemin Block --> will take care of 
       // minification. This option is pre-configured if you do not wish to use 
       // Usemin blocks. 
       // dist: { 
       // files: { 
       //  '<%= yeoman.dist %>/styles/main.css': [ 
       //  '.tmp/styles/{,*/}*.css', 
       //  '<%= yeoman.app %>/styles/{,*/}*.css' 
       //  ] 
       // } 
       // } 
      }, 
      htmlmin: { 
       dist: { 
        options: { 
         /*removeCommentsFromCDATA: true, 
         // https://github.com/yeoman/grunt-usemin/issues/44 
         //collapseWhituseminPrepareespace: true, 
         collapseBooleanAttributes: true, 
         removeAttributeQuotes: true, 
         removeRedundantAttributes: true, 
         useShortDoctype: true, 
         removeEmptyAttributes: true, 
         removeOptionalTags: true*/ 
        }, 
        files: [{ 
         expand: true, 
         cwd: '<%= yeoman.app %>', 
         src: ['*.html', 'partials/*.html'], 
         dest: '<%= yeoman.dist %>' 
        }] 
       } 
      }, 
     copy: { 
      dist: { 
       files: [{ 
        expand: true, 
        dot: true, 
        cwd: '<%= yeoman.app %>', 
        dest: '<%= yeoman.dist %>', 
        src: [ 
         '*.{ico,png,txt}', 
         'lib/**/*', 
         'img/{,*/}*.{gif,webp}', 
         'fonts/*', 
         'languages/*' 
        ] 
       }, { 
        expand: true, 
        cwd: '.tmp/img', 
        dest: '<%= yeoman.dist %>/img', 
        src: [ 
         'generated/*' 
        ] 
       }] 
      }, 
      styles: { 
       expand: true, 
       cwd: '<%= yeoman.app %>/css', 
       dest: '.tmp/css/', 
       src: '{,*/}*.css' 
      } 
     }, 
     concurrent: { 
      server: [ 
       'copy:styles' 
      ], 
      test: [ 
       'copy:styles' 
      ], 
      dist: [ 
       'copy:styles', 
       'imagemin', 
       'svgmin', 
       'htmlmin' 
      ] 
     }, 
//  cdnify: { 
//   dist: { 
//    html: ['<%= yeoman.dist %>/*.html'] 
//   } 
//  }, 
     ngmin: { 
      dist: { 
       files: [{ 
        expand: true, 
        cwd: '.tmp/concat/js', 
        src: '*.js', 
        dest: '.tmp/concat/js' 
       }] 
      } 
     }, 
     uglify: { 
      dist: { 
       options:{ 
        compress:false, 
        mangle:false 
       }, 
       files: { 
        '<%= yeoman.dist %>/js/scripts.js': [ 
         '<%= yeoman.dist %>/js/scripts.js' 
        ] 
       } 
      } 
     }, 


//  concat:{ 
//   options:{ 
//    seperator:';' 
//   }, 
//   dist:{ 
//    src :['app/js/**/*.js', 'app/lib/**/*.js'], 
//    dest :'dist/app/js/<%pkg.name%>.js' 
// 
//   } 
//  }, 
     exec:{ 
      instrument:{ 
       cmd: function(){ 
        return 'istanbul instrument app/js -o app/instrumentjs'; 
       } 

      }, 
      djangoUp:{ 
       cmd: function(){ 
        var command = 'workon stokeet-api && cd ../stokeet-api/ && python manage.py runserver> /dev/null 2>&1 && cd ../angular/ & '; 
        return command; 
       } 
      }, 

      webserverUp:{ 
       cmd: function(){ 
        var command = 'cd ../angular/ && node ./scripts/web-server.js > /dev/null 2>&1 &'; 
        return command; 
       } 

      } 
     }, 
     karma:{ 
      unit:{ 
       configFile:'config/karma.conf.js', 
       autoWatch:true, 
       browsers:['PhantomJS'] 
      }, 
      ci:{ 
       configFile:'config/karma.conf.js', 
       singleRun:true, 
       autoWatch:false, 
       browsers:['Firefox','PhantomJS'] 
      }, 
      buildTest:{ 
       configFile:'config/karma.conf.js', 
       singleRun:true, 
       autoWatch:false, 
       browsers:['PhantomJS'] 
      } 

     } 



    }); 
    grunt.registerTask('coverage',['coveralls']); 
    grunt.registerTask('default',['jshint']); 
    grunt.registerTask('instrument',['exec: instrument']); 
// grunt.registerTask('concat',['concat']); 
    grunt.registerTask('dev_up',['exec:djangoUp', 'exec:webserverUp']); 
    grunt.registerTask('test',[ 
          'clean:server', 
          'concurrent:test', 
          'autoprefixer', 
          'connect:test', 
          'karma:buildTest']), 
    grunt.registerTask('build', [ 
          'clean:dist', 
          'useminPrepare', 
          'concurrent:dist', 
          'autoprefixer', 
          'concat', 

          'copy:dist', 
          'ngmin', 
          'cssmin', 
          'uglify', 
          'rev', 
          'usemin' 
    ]); 
    grunt.registerTask('server', function (target) { 
     if (target === 'dist') { 
      return grunt.task.run(['build', 'connect:dist:keepalive']); 
     } 

     grunt.task.run([ 
      'clean:server', 
      'concurrent:server', 
      'autoprefixer', 
      'connect:livereload', 
      'watch' 
     ]); 
    }); 

}; 

widać Próbowałem nadrzędnymi przepływ usemin domyślne, ale to nie pomogło

Podejrzewam, że ma to związek ze znanym problemem minikularyzacji kątowej, ale ponieważ ngmin jest tutaj uruchomiony, a cały mój kod (nie jestem pewien co do wtyczek), szanuje tablicę oznaczającą bezpieczny układ kątowy, którego nie jestem pewien.

jakieś pomysły? Będzie mi miło jakikolwiek z pomocy z tym

Odpowiedz

0

Czy wszystko działa, jeśli podajesz tylko pliki (serwer pomrukowy)? A więc: Nie ma problemu z kątową w ten sposób?

Czy przeczytałeś link do strony błędu? http://docs.angularjs.org/error/ $ wtryskiwacz: modulerr p0 = ourname & p1 = Błąd:% E2% 80% A6 (http:% 2F% 2Flocalhost: 8085% 2Flib% 2Fangular% 2Fangular.min.js: 32: 462)

It mówi, że jest problem z naszym modułem "ourname".

Czy masz dla nas kod?

Nie jestem całkiem pewien, co to zmienia, ale można również zdefiniować to lubią:

useminPrepare: { 
      html: '<%= yeoman.app %>/index.html', 
      options: { 
       dest: '<%= yeoman.dist %>', 
       flow: { 
        steps: {'js': ['concat','ngmin']}, 
        post: {} 
       } 
      } 
     }, 

https://github.com/yeoman/grunt-usemin#flow Czy przegapiłeś „przepływ”?

Może jedno z pytań pomaga znaleźć rozwiązanie;)

+3

Zrobiłem mix flow i html .. ale to nie był problem (nawet nie jestem pewien, czy to nie jest pozostałość debugowania). również ngmin nie będzie działał tutaj jako krok (przynajmniej obecnie). a nawet Ngmin nie chroni poprawnie aplikacji przed złamaniem przez uglifyjs. obecnie przebudowałem proces kompilacji bez zminimalizowania (co nie było łatwe) i aplikacja działa. powiedzmy, że dokumenty usemin są prawie bezużyteczne, a budowane przez yeoman komentarze do kodu wprowadzają w błąd. Postaram się później poprawić dokument. – alonisser

+0

Jak wygląda teraz proces budowania? Mam ten sam problem ... –

3

Postaram się być krótkie wyjaśnienie problemu, gdy budynek z usemin 2.0.x oraz ngmin w angularjs (według mojego doświadczenia, mogę się mylić coś, jeśli tak proszę mnie poprawić):

normalnego przepływu w zadaniu budowy grunt jest to, że ngmin jest wykonywany przed usemin i innych, aby kod z zastrzyków, takich jak ten:

... 
angular.module("Config",[]) 
    .config(["$httpProvider","CONSTANTS","ERRORS","HEADERS",function(a,b,c,d){var 
... 

usemin 0,1. x używało tylko 'concat', ale ve rsion 2.0.x jest za pomocą „concat” i „uglifyjs” tak, po łączenia kodu, ponownie zmienia kod JavaScript, to psuje ngmin, jak widać na poniższym przykładzie:

... 
angular.module("Config",[]) 
    .config(function(a,b,c,d){var 
... 

Więc trzeba zatrzymać to definiowanie przepływu w useminPrepare, jak następuje:

useminPrepare: { 
     html: '<%= yeoman.app %>/index.html', 
     options: { 
      dest: '<%= yeoman.dist %>', 
      flow: { 
       steps: {'js': ['concat']}, 
       post: {} 
      } 
     } 
    }, 

Edycja Możesz dodać zadanie w zadaniach Grunt:

grunt.registerTask('build', [ 
    'clean:dist', 
    'jshint', 
    'useminPrepare', 
    'imagemin', 
    'cssmin', 
    'ngmin', 
    'uglify', 
    'rev', 
    'usemin' 
]) 

Mam nadzieję, że to pomoże!

+0

tak zasadniczo sugerujesz wyłączyć użycie uglify.js w kompilacji?Mogę (i już) to zrobić, zachowując niektóre zalety uglify.js z wyłączaniem mangowania przy jednoczesnym umożliwieniu kompresji. ale jestem pewien, że istnieje sposób obejścia tego, to jest cały punkt ng-min, z notacji kanciastych tablic ciągów. itp. – alonisser

+0

nie, używam uglify, ale w innym kroku przed usemin, możesz mieć w swoich zadaniach Gruntfile: grunt.registerTask ('build', [ 'clean: dist', 'jshint', ' useminPrepare” 'imagemin' 'cssmin' 'ngmin' 'zeszpecić' 'rev' 'usemin' ]); – QuarK

+0

Czy możesz dodać swoje błędne zadanie do odpowiedzi? – alonisser

1

Myślę, że domyślny plik GruntFile.js zmienił się nieco w Yeomanu, ponieważ odpowiedź na to pytanie została udzielona.

Ten pracował dla mnie:

odkomentowane poniższy uglify blok i dodano opcję mangle:false.

uglify: { 
    options:{mangle:false}, 
    dist: { 
    files: { 
     '<%= yeoman.dist %>/scripts/scripts.js': [ 
     '<%= yeoman.dist %>/scripts/scripts.js' 
     ] 
    } 
    } 
}, 

Potem wykomentowane linii ngmin (co trwało wieki, aby uruchomić w każdym razie).

Rezultatem jest niezłożona js, która jest znacznie większa, ale dobrze obsługuje mój kod kątowy. Ostatecznie przypuszczam, że ngmin będzie na tyle sprytny, aby radzić sobie z rzeczami bardziej płynnie, ale do tego czasu nie mam problemu z dodatkowymi bajtami.

2

Wystąpił również ten sam problem po instalacji yo angular bez żadnych modyfikacji.

Poniższa dyskusja pomogła mi rozwiązać go: https://github.com/DaftMonk/generator-angular-fullstack/issues/164

W skrócie:

wyszukiwania dla

<!-- build:js scripts/vendor.js -->

i zmienić go na

<!-- build:js(app/..) scripts/vendor.js -->

+0

jeśli masz pliki .js w aplikacji, nie powinieneś tego zmieniać! Tylko jeśli masz je poza folderem aplikacji – karantan

-3

jeśli używasz Yeoman do budowania swojego zastosowania kątowego.

Wystarczy wpisać

yo doctor 

To pomoże Ci określić, jakie są obecne wszystkie problemy z aplikacją.

Yeoman Doctor 
Running sanity checks on your system 

✔ Global configuration file is valid 
✔ NODE_PATH matches the npm root 
✖ Node.js version 

Your Node.js version is outdated. 
Upgrade to the latest version: https://nodejs.org 

✔ No .bowerrc file in home directory 
✔ No .yo-rc.json file in home directory 
✔ npm version 

Found potential issues on your machine :(