2015-05-20 26 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语句来说明哪些文件需要其他文件中。

相关问题