0

Установка:Grunt + Concat + Angularjs

  • Gruntfile со следующей задачей:

    Concat: { сборки: { файлов: { 'строить/app.js': [ 'SRC/.js', 'SRC// .js', '! SRC/поставщики/' ], }}

  • Много угловых модулей, со своими контроллерами, услуг и так далее, со структурой, как это:

    A/ a.js // Модуль декларации, как: angular.module ('a', []) a-controller.ks // Что устанавливает контроллер в определении его корневого модуля, например: angular.module ('a'). controller() ...

Номер редакции:

Задача объединяющее все JS файлы, которые он находит в папке build к одному app.js файл, и он делает это отлично, но путает с порядком файлов при конкатенации.

Например, он присоединяет первый файл контроллера вместо основного файла папки, содержащей декларацию модуля, вызвав следующую ошибку:

Module xxxx not available!

Я полагаю, что проблема лежит в том, как concat создает файлы и это делается ядром grunt и, в частности, библиотекой minimatch, а также возможностью, что она обрабатывает тире в первую очередь, чем буквы, но я не знаю, как настроить изменение этого поведения и даже знать, возможно ли это.

Вопрос:

Итак, вопрос: Как я могу сделать Grunt/Grunt-CONCAT к процессу пунктирной й первым, чем другие в той же папке, поэтому порядок поддерживается?

Благодаря

Update 1:

Порывшись еще, кажется, что это не имеет ничего общего с упорядочением внутри папки, но Grunt/Ядро посылает корневые файлы до конца и положить сначала они листовые.

ответ

3

Просто укажите порядок, в котором вы хотите согласовать свои файлы, упорядочив их, что я имею в виду, сначала добавьте отдельные файлы, которые должны быть объединены при запуске, после полной папки, которая не нуждается в заказе, и, наконец, ваши конечные файлы, что-то вроде этого rougth:

grunt.initConfig({ 
    concat: { 
    js: { 
     src: ['lib/before.js', 'lib/*', 'lib/after.js'], 
     dest: 'bundle.js', 
    } 
    } 
}); 
+0

Спасибо за ваш ответ. Пожалуйста, примите во внимание, что это почти ~ 300 файлов, поэтому указать их один за другим будет громоздким, что сделает мой Gruntfile неуправляемым. Можете ли вы предоставить другое решение этой проблемы? Спасибо – diosney

+0

Ну, вы можете сделать точно так, как указано в ответе, вы бы перенесли первый файл с объявлениями вашего модуля (например, lib/before.js) в качестве первого параметра, тогда * позаботится о ваших 299 других файлах (lib/*). Имеет ли это смысл? Может, я не понял ваш вопрос. Вы должны указать что-то. вы не можете сделать заказ, не сообщая ему, в каком порядке. Или, альтернативно, напишите его в псевдокоде/английском, и мы постараемся понять, что вы думаете, что он должен делать. – redfox05

0

вы должны указать на grunt-concat задачи заказ вы хотите, чтобы ваши файлы построены.Для моих проектов я обычно храню структуру папок, в которой контроллеры входят в папку app/controllers, службы в services и т. Д., Но имена могут отличаться. Я также сохраняю app.js, который объявляет мой модуль приложения и задает для него обработчик конфигурации. Я использую конфиг как это для grunt-uglify, но то же самое может быть сделано для concat с практически без изменений:

uglify: { 
    development: { 
     files: { 
      'public/scripts/app.js': [ 
       'public/app/app.js', 
       'public/app/controllers/*.js', 
       'public/app/directives/*.js', 
       'public/app/services/*.js' 
      ] 
     } 
    } 
} 
+0

Это будет способ сделать это, но у меня обычно есть только один контроллер и служба на модуль, поэтому я буду в конце с одной папкой только с одним файлом :( – diosney

0

Я просто скопировать вставить мой ответ, деталь вы хотите на втором снимке, я надеюсь помочь вам.

вы можете рассмотреть это решение

  1. Отдельные декларации модуля к xxx.module.js
  2. В хрюкать-вно-CONCAT изменить конфиг, как показано ниже:

    место это за пределами grunt.initConfig

var clientApp = './app/';


хрюкать-вно-CONCAT конфигурации

dist: {// grab module first, state the second 
    src: [ 
     clientApp+'**/*-controller.js', 
     clientApp+'**/*.module.js', 
     clientApp+'**/*.state.js', 
     clientApp+'**/*.js' 
     ], 
    dest: 'dist/<%= pkg.name %>.js' 
} 

я использую состояние так что я должен определить состояние тоже, прежде чем пытаться перейти к любому государству. Это предварительный код моего кода, декларация модуля объявляется сначала перед чем-либо, а затем мое состояние. даже minified не создает никаких проблем. my code

Надеюсь, это поможет вам. я следовать стилю этого johnpapa в guide, ваша проблема может решить там, если мое решение не работает

ordering