2015-05-22 56 views
0

設置:咕嚕+的毗連+ Angularjs

  • 一個Gruntfile與以下任務:

    CONCAT:{ 編譯:{ 文件:{ '建立/ app.js': [ 'SRC/的.js', 'SRC//的.js', '!SRC /供應商/' ], } }

  • 很多角模塊,以其控制器,服務,等等,具有這樣的結構:

    一個/ a.js //模塊聲明像: angular.module('a',[]) a-controller.ks //設置控制器的根模塊定義,如:angular.module('a').controller()...

Issue:

任務串接所有找到的build文件夾到一個app.js文件的js文件,並且它這樣做很好,但串聯時文件的順序弄亂。

例如,它加到第一個控制器文件,而不是包含模塊聲明,引發了以下錯誤主文件夾的文件:

Module xxxx not available!

我想問題在於方式concat建立的文件和這是由grunt核心,特別是minimatch庫完成的,它可能會把破折號當作字母,但我不知道如何配置來改變這種行爲,甚至知道這是否可能。

問:

所以,問題是:怎樣才能讓咕嚕/咕嚕聲,CONCAT以處理虛線˚F比別人在同一個文件夾中第一個這樣的排序保持?

感謝

更新1:

挖掘更多之後,它似乎沒有任何一個文件夾中的排序,但格朗特/核心根目錄的文件發送至年底,並把他們首先是葉子。

回答

3

只需指定您想要對文件進行連接的順序,將它們按順序排列,我的意思是,首先添加單個文件,這些文件應該在開始時連接,在完整文件夾不需要訂購之後,最後是你的最後文件,一些rougth這樣的:

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

謝謝您的回答。請考慮到這是近300個文件,所以一一指定它們會很麻煩,會讓我的Gruntfile變得難以管理。你能否提供解決這個問題的其他方法?謝謝 – diosney

+0

好吧,您可以按照答案中的說明完成操作,將第一個包含模塊聲明(例如lib/.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. 在咕嚕-的contrib-CONCAT修改配置如下圖所示:

    這個地方外grunt.initConfig

var clientApp = './app/';


咕嚕-的contrib-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' 
} 

我使用狀態,所以我必須努力導航到任何狀態之前也定義狀態。這是預覽我的代碼,模塊聲明是在任何事情之前聲明爲拳頭,然後是我的狀態。即使縮小也不會產生任何問題。 my code

我希望這對你有所幫助。 我按照這個johnpapa的風格guide,您的問題可能會解決那裏,如果我的解決方案不起作用

ordering