2013-11-10 2 views
2

Мои index.html имеет:useminPrepare вызывает `src` ошибку

<!doctype html> 
<!--[if lt IE 7]>  <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> 
<!--[if IE 7]>   <html class="no-js lt-ie9 lt-ie8"> <![endif]--> 
<!--[if IE 8]>   <html class="no-js lt-ie9"> <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title></title> 
    <meta name="description" content=""> 
    <meta name="viewport" content="width=device-width"> 
    <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> 


    <link rel="stylesheet" href="/public/stylesheets/bootstrap.css"> 
    <link rel="stylesheet" href="styles/main.css"> 
    </head> 
    <body ng-app="WebApp"> 
    <base href="/app"> 
    <!--[if lt IE 7]> 
     <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> 
    <![endif]--> 

    <!--[if lt IE 9]> 
     <script src="bower_components/es5-shim/es5-shim.js"></script> 
     <script src="bower_components/json3/lib/json3.min.js"></script> 
    <![endif]--> 

    <!-- Add your site or application content here --> 
    <div class="container" ng-view=""></div> 

    <!-- Google Analytics: change UA-XXXXX-X to be your site's ID --> 
    <script> 
     (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
     (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
     m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
     })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

     ga('create', 'UA-XXXXX-X'); 
     ga('send', 'pageview'); 
    </script> 

    <script src="/app/bower_components/angular/angular.js"></script> 
    <!-- build:js /app/scripts/angular.js --> 
    <script src="/app/bower_components/angular-route/angular-route.js"></script> 
    <script src="/app/bower_components/angular-resource/angular-resource.js"></script> 
    <script src="/app/bower_components/angular-cookies/angular-cookies.js"></script> 
    <script src="/app/bower_components/angular-sanitize/angular-sanitize.js"></script> 
    <!-- endbuild --> 

    <!-- build:js({.tmp,app}) /app/scripts/scripts.js --> 
    <script src="/app/scripts/app.js"></script> 
    <script src="/app/scripts/controllers/main.js"></script> 
    <!-- endbuild --> 
</body> 
</html> 

Все моего углового кода находится в app директории с верхнего уровня. Мой Gruntfile.coffee является:

useminPrepare: 
    html: "<%= appConfig.app %>/index.html" 
    options: 
    dest: "<%= appConfig.dist %>" 

usemin: 
    html: "<%= appConfig.dist %>/*.html" 
    css: ["<%= appConfig.dist %>/styles/**/*.css"] 
    options: 
    dirs: ["<%= appConfig.dist %>"] 

Но я получаю сообщение об ошибке:

Running "useminPrepare:html" (useminPrepare) task 
Going through app/index.html to update the config 
Looking for build script HTML comment blocks 
Warning: An error occurred while processing a template (Cannot read property 'src' of undefined). Use --force to continue. 

Что я делаю неправильно?

+0

Должен ли он искать файлы css? –

+0

У 'useminPrepare' нет каких-либо файлов CSS, которые он упоминает. – Shamoon

+0

Ваша конфигурация выглядит правильно. Вероятно, вы видели в Интернете, что в нем была проблема с хрюканьем, а некоторые из них помогли «очистить npm cache» или переустановить grunt после обновления. Вы пробовали это? –

ответ

1

Я думаю, что ваша проблема в том, что вы хотите согласовать/уменьшить угловые источники. Документированный способ - использовать предоставленные файлы, такие как angular-route.min.js, и включить их в раздел заголовка вашего html.

Таким образом, следующие строки бросает эту ошибку:

<script src="/app/bower_components/angular/angular.js"></script> 
<!-- build:js /app/scripts/angular.js --> 
<script src="/app/bower_components/angular-route/angular-route.js"></script> 
<script src="/app/bower_components/angular-resource/angular-resource.js"></script> 
<script src="/app/bower_components/angular-cookies/angular-cookies.js"></script> 
<script src="/app/bower_components/angular-sanitize/angular-sanitize.js"></script> 
<!-- endbuild --> 

Как примечание стороны: этот угловой ЛИЭС бросать тяжелые сложные исходники, в некоторых частях, его достаточно сложная задача, чтобы точно настроить свой личный Minifier, как и угловые разработчики сделали с их, чтобы предоставить общедоступные файлы angular-xxxxx.min.js.

+0

Решает проблему? Совершенно нормально конкат/минимизировать угловые источники. Ударный генератор Yeoman сконфигурирован для согласования/минимизации угловых источников с помощью таких задач, как упомянутый выше. Поэтому маловероятно, что проблема была в этом. – Alexei

+0

Спасибо за информацию, я этого не знал. Но я все еще думаю, что это накладные расходы. Особенно, когда вы строите свой проект с помощью [CI] (http://de.wikipedia.org/wiki/Continuous_Integration) -системы и каждый раз сокращаете угловые источники, хотя они и не изменились. Энергосбережение;) – angabriel

+0

Упорядочить поражения 'usemin', если я должен включать их отдельно, нет? – Shamoon

1

Если я правильно понял, ваш файл index.html находится в каталоге app, поэтому вы можете попробовать использовать относительные ссылки на скрипты в вашем html.

<!-- build:js scripts/angular.js --> 
<script src="bower_components/angular-route/angular-route.js"></script> 
<script src="bower_components/angular-resource/angular-resource.js"></script> 
<script src="bower_components/angular-cookies/angular-cookies.js"></script> 
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script> 
<!-- endbuild --> 

<!-- build:js({.tmp,app}) scripts/scripts.js --> 
<script src="scripts/app.js"></script> 
<script src="scripts/controllers/main.js"></script> 
<!-- endbuild --> 
Смежные вопросы