Concat javascript файлы в одном файле

0

Структура файла.

/app 
  /components 
     /core 
        /extensions
           - array.js 
           - string.js
        /services
           - logger.js 
        /lib 
           - core.js 

core.js

(function() {
     'use strict';
     angular.module('app.core',[]);  
}());

Мне нужно перезаписать core.js на каждой сборке, скопировав на нее все другие js файлы в этой папке, сохраняя это первое исходное содержимое замедления модуля.

Это желаемый результат для Core.js:

(function() {
     'use strict';
     angular.module('app.core',[]);  
}());
// content of array.js
(function() {
   'use strict';

    var core = angular.module('app.core');
    core.config( .....) 
 }());     

 // content of string.js
 ...
 // content of logger.js

Iv'e попытался выполнить две задачи, которые я верил в то, что для этого не было, но не нашел способ настроить их для моих нужд.

1) у grunt-concat было 2 вопроса, первое, что оно добавляет содержимое с самого начала файла, а не конец файла, как я хотел. и он не отменяет существующий контент.

2) grunt-copy отменяет, но переопределяет весь файл.

То, что было предпринято, заключается в использовании функции процесса для копирования ворчания.

  copy: {
      src: ['app/components/core/{,*/}*.js'],
      dest: 'app/components/core/lib/core.js',
      options:{
          process : function(content, srcpath){
              return content; // do some manipulation on content here. 
          }
      }         
  }

Это также проблематично, так как я должен был бы сохранить текст, содержащий определение углового модуля в моем файле Grunt, и добавить его к первому содержимому, которое входит в мою функцию процесса, что-то вроде этого, которое кажется действительно запутанным.

 process : function(content, srcpath){
              if(isFirst) {
                  isFirst = false;
                  // here i will append the angular module deceleration. 
              }
              return content;
          }

Есть ли элегантный способ добиться того, что описал iv'e?

Теги:
gruntjs

1 ответ

1
Лучший ответ

grunt-contrib-concat - это именно то, что вам нужно, просто выполните следующие действия:

  1. переименуйте свой текущий core.js в _banner.js (или что угодно) - это хорошая практика не перезаписывать ваш файл баннера в любом случае
  2. установите concat для _banner.js затем других файлов и сохраните его как core.js:

    concat: {
      core: {
        files: [{
          src: [
            'app/components/core/_banner.js',
            'app/components/core/extensions/*.js',
            'app/components/core/services/*.js'
          ],
          dest: 'app/components/core/lib/core.js'
        }]
      },
    },
    

Должен дать вам то, что вы хотите

  • 0
    я тоже так думал, но у меня есть 2 проблемы с grunt concat, как указано в моем вопросе выше. сначала мне нужно было бы как-нибудь полностью очистить файл, так как каждый раз он объединяет все. во-вторых, он объединяет начало файла, а не конец файла
  • 0
    files: [...] пытается создать каталог с файлами в core.js, что не удается. Вы научили меня, что я могу контролировать порядок объединения, используя массив источников. У меня все еще есть проблема, что мне нужно, как очистить файл core.js перед следующим concat.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню