Concat javascript文件在单个文件下

时间:2015-09-30 13:25:17

标签: javascript angularjs gruntjs

文件结构。

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

Core.js

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

我需要的是通过将该文件夹中的所有其他js文件复制到每个构建上来覆盖core.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

我曾尝试过2个咕噜咕噜的任务,我认为这些任务不是为了这个目的,而是找不到根据我的需要配置它们的方法。

1)grunt-concat有两个问题,第一个是它从文件的开头追加内容,而不是像我想要的那样追加文件的结尾。并且它不会覆盖现有内容。

2)grunt-copy会覆盖但会覆盖整个文件。

尝试使用过程函数进行grunt复制。

  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. 
          }
      }         
  }

这也是有问题的,因为我必须在我的Gruntfile中保留包含角度模块定义的文本,并将其附加到进入我的过程函数的第一个内容中,这样的东西看起来非常混乱。

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

有没有一种优雅的方式来实现我所描述的?

1 个答案:

答案 0 :(得分: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'
        }]
      },
    },
    
  3. 应该给你你想要的东西