2015-05-20 50 views
2

我正在使用gulp構建一個單獨的JavaScript文件,其中包含gulp-concatgulp-uglify。因爲這些文件以錯誤的順序被連接起來如何使用Gulp或Javascript框架繞過Javascript文件順序?

原始文件

//File 1 
var Proj = Proj || {}; 

//File 2 
Proj.Main = (function() { 
    var Method = function(){ /*Code*/ }; 
    return { "Method":Method }; 
})(); 

//File 3 
Proj.Page = (function() { 
    var Method = Proj.Main.Method; 
    return { "Method":Method }; 
})(); 

咕嘟咕嘟返回一個錯誤minified的文件。我知道我可以在.src([])中指定順序,但我不想在添加JavaScript文件時維護該數組。

有沒有辦法創建引用這些「名稱空間」,而不必擔心連接文件的順序?或者,有沒有辦法讓gulp自動神奇地處理這些命名空間的知識連接?

編輯:

我知道我可以指定.src([])裏面的文件順序。我想開發而不必擔心文件順序,無論是通過一個大包還是一個JavaScript框架。謝謝你的回覆,但我需要一個確定的「不,你不能這樣做。」或者「是的,以下是......」以將線程標記爲已回答。

+0

就我個人而言,我會以不同的方式寫javascript,一旦一個腳本已經加載,我會發出一個事件,以便其他腳本可以執行。看起來如果兩個腳本如此緊密依賴,他們應該以不同的方式管理。 –

回答

3

那麼,一個選項是嘗試gulp-order

另外,請查看this answer to "gulp concat scripts in order?"

基本上,它提到了你已經說過的,關於必須按照你希望它們進來的順序明確地命名這些文件。我知道你不想這樣做,但是如果別的什麼人會知道你的訂單想要你的文件?

有一點值得指出的是,雖然是你有一組文件,其中的順序並不重要,然後,比如說,2個文件,其中的順序確實事,你可以這樣做的:

gulp.src([ 
    'utils/*.js', 
    'utils/some-service.js', 
    'utils/something-that-depends-on-some-service' 
]) 

一飲而盡,CONCAT不重複的文件,所以一切不是some-service.jssomething-that-depends-on-some-service.js將得到第一連結,然後最後兩個文件將在正確的順序連接起來。

1

由於沒有提到,實現webpack或browserify將絕對解決這個問題,而無需實施某種hacky感覺的解決方案。

下面是如何使用它的一個簡單的例子:

var source = require('vinyl-source-stream'), //<--this is the key 
    browserify = require('browserify'); 

    function buildEverything(){ 
     return browserify({ 
       //do your config here 
       entries: './src/js/index.js', 
      }) 
      .bundle() 
      .pipe(source('index.js')) //this converts to stream 
      //do all processing here. 
      //like uglification and so on. 
      .pipe(gulp.dest('bundle.js')); 
     } 
    } 

    gulp.task('buildTask', buildEverything); 

你使用require語句來說明哪些文件需要其他文件中。

相關問題