Grunt + Concat + Angularjs

时间:2015-05-22 17:51:41

标签: javascript angularjs node.js gruntjs grunt-contrib-concat

设定:

  • Gruntfile,其中包含以下任务:

    concat:{       构建:{         档案:{           'build / app.js':[             'SRC / 的.js',             'SRC /的 / 的.js',             '!SRC /销售商/ '           ]         }       }

  • 许多角度模块及其控制器,服务等,具有如下结构:

    A /      a.js //模块声明如:angular.module('a',[])      a-controller.ks //在根模块定义中设置控制器,如:angular.module('a')。controller()...

问题:

该任务将它在build文件夹中找到的所有js文件连接到单个app.js文件,并且它可以正常运行,但在连接时会弄乱文件的顺序< /强>

例如,它首先连接控制器文件而不是包含模块声明的主文件夹文件,从而触发以下错误:

  

模块xxxx不可用!

我认为问题在于concat构建文件的方式,这是由grunt核心,特别是minimatch库完成的,并且它可能将破折号视为首先是字母,但我不知道如何配置来改变这种行为,甚至知道这是否可能。

问题:

所以,问题是:如何使Grunt / Grunt-concat首先处理虚线f而不是同一文件夹中的其他文件,以便保持排序?

由于

更新1:

在挖掘更多之后,似乎它与文件夹内的排序无关,但是Grunt / Core将根文件发送到最后并将它们放在叶子文件中。

3 个答案:

答案 0 :(得分:3)

只需指定要连接文件的顺序,按顺序排列,我的意思是,首先添加应该在开始时连接的单个文件,在完整文件夹之后不需要订单,以及最后你的最终文件,像这样粗糙:

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

答案 1 :(得分:0)

您必须为grunt-concat任务指定您希望构建文件的顺序。对于我的项目,我通常会保留一个文件夹结构,其中控制器位于app/controllers文件夹,services中的服务等,但名称可能会有所不同。我还保留了app.js声明我的app模块并为其指定配置处理程序。我为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'
            ]
        }
    }
}

答案 2 :(得分:0)

我只是复制粘贴我的答案,你想要的第二张照片上的细节,我希望能帮到你。

你可以考虑这个解决方案

  1. 将模块声明分隔为xxx.module.js
  2. 在grunt-contrib-concat中修改配置如下:

    将此放在 grunt.initConfig

  3. 之外
      

    var clientApp =&#39; ./ app /&#39 ;;

    grunt-contrib-concat config

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

    我使用状态,所以我必须在尝试导航到任何状态之前定义状态。这是预览我的代码,模块声明在任何事情之前声明拳头,然后是我的状态。即使缩小也不会造成任何问题。 my code

    我希望这对你有所帮助。 我遵循这个johnpapa的风格guide,如果我的解决方案不起作用,你的问题可能会在那里解决

    ordering