2016-03-20 62 views
0

我正在使用gulp使用gulp-msbuild構建我的web項目。但是,我有多個Web項目需要具有不同的構建參數才能發佈到正確的文件夾。管道到下一任務之前訪問src參數的值

這裏是我的gulpfile.js的一部分:在PublishUrl動態(見##csproj file name without the extension##

gulp.task('publish', function() { 
    var webProjectsPaths = [ 
     '/Project1/Project1.csproj' 
     '/Project2/Project2.csproj' 
    ]; 

    return gulp 
     .src(webProjectsPaths) 
     .pipe(msbuild({ 
      targets: ['WebPublish'], 
      toolsVersion: 14.0, 
      errorOnFail: true, 
      stdout: true, 
      properties: { 
       Configuration: 'Debug', 
       WebPublishMethod: 'FileSystem', 
       DeleteExistingFiles: true, 
       PublishUrl: 'Publish/##csproj file name without the extension##' 
      }, 
     })); 
}); 

我想將它發送到msbuild任務之前訪問被傳遞給.src每個路徑,所以我可以做。

回答

1

如果您將該gulp管道移出一個函數,該函數可以提前確定路徑併發布url。

// returns one stream that builds one project 
function buildWebProject(projectName) { 
    var path = '/' + projectName + '/' + projectName + '.csproj'; 
    var publishUrl = 'Publish/' + projectName; 

    return gulp.src(path) 
    .pipe(msbuild({ 
     targets: ['WebPublish'], 
     toolsVersion: 14.0, 
     errorOnFail: true, 
     stdout: true, 
     properties: { 
     Configuration: 'Debug', 
     WebPublishMethod: 'FileSystem', 
     DeleteExistingFiles: true, 
     PublishUrl: publishUrl 
     } 
    })); 
} 

然後在你的「發佈」一飲而盡任務,使用該功能,使每個項目流,使用像merge-stream模塊的流合併成一個單一的數據流,並返回合併的流。

var mergeStream = require('merge-stream'); 

gulp.task('publish', function() { 
    var webProjects = [ 
    'Project1', 
    'Project2' 
    ]; 

    var streams = webProjects.map(buildWebProject); 

    return mergeStream(streams); 
} 
相關問題