Usemin "Различные источники, пытающиеся писать в одном месте"
У меня есть приложение AngularJS. Я работаю над задачами usemin. Это приложение имеет 2 html-страницы, оба включают блок, минитизированный в common.js, а на других страницах - js, уменьшенный для этих конкретных страниц.
page1.html
<!-- build:js scripts/common.js -->
<!-- bower:js -->
<script src="a.js"></script>
<script src="b.js"></script>
<!-- endbower -->
<!-- endbuild -->
<!-- build:js scripts/page1.js -->
<!-- bower:js -->
<script src="c.js"></script>
<script src="d.js"></script>
<!-- endbower -->
<!-- endbuild -->
page2.html
<!-- build:js scripts/common.js -->
<!-- bower:js -->
<script src="a.js"></script>
<script src="b.js"></script>
<!-- endbower -->
<!-- endbuild -->
<!-- build:js scripts/page2.js -->
<!-- bower:js -->
<script src="e.js"></script>
<script src="f.js"></script>
<!-- endbower -->
<!-- endbuild -->
Gruntfile.js
useminPrepare: {
html: ['<%= yeoman.app %>/page1.html', '<%= yeoman.app %>/page2.html'],
options: {
dest: '<%= yeoman.dist %>'
}
},
Usemin расстроен, потому что common.js определен в обоих файлах с ошибкой: Fatal error: разные источники, пытающиеся записать в тот же пункт назначения:. Я (думаю) Мне нужно включить и page1 и page2 в useminPrepare, чтобы правильно получить page1.js и page2.js. Как люди решают эту проблему?
Ответы
Ответ 1
Обычно с angular люди создают одностраничные приложения и создают только один "основной" index.html для всего скелета страницы. Таким образом, вам приходится иметь дело только с одним набором файлов. Различные подстраницы отображаются в данный div, используя ui-router, ng-includes или что-то еще.
Ответ 2
Проблема для меня, когда я столкнулся с этой проблемой, заключалась в том, что код должен быть точно таким же между комментариями build/endbuild html. Кажется, он должен совпадать с именами файлов, но, похоже, он соответствует содержимому комментариев. Даже проблема с вкладками или пробелами может быть проблемой.
Ответ 3
ПРЕДУПРЕЖДЕНИЕ НЕВЕСТИРОВАНО.
Вы можете создать настраиваемый блок, который будет переписывать блок в <script src="scripts/common.js"></script>
, но не будет пытаться "построить" script в процессе usemin.
options: {
blockReplacements: {
noBuild: function (block) {
return '<script src="scripts/common.js"></script>';
}
}
Затем во всех HTML файлах, которые вы НЕ хотите создавать общий script для, но вы хотите заменить путь, напишите следующее:
<!-- build:noBuild scripts/common.js -->
<!-- bower:js -->
<script src="a.js"></script>
<script src="b.js"></script>
<!-- endbower -->
<!-- endbuild -->