将 CDN link 列表连接到文件 (gulp)

Concatanate a CDN link list to a file (gulp)

我有一个 CDN(或远程)脚本列表(完整 URL)。我想将其转换为一个串联文件 (all.js)。 我可以用 gulp 做到这一点吗? 换句话说,它是正确的工具吗?

// Does not work (no error, but no file generated)
var gulp = require('gulp');
var concat = require('gulp-concat');

gulp.task('scripts', function() {
  return gulp.src(['https://code.jquery.com/jquery-2.1.4.min.js'])
    .pipe(concat('all.js'))
    .pipe(gulp.dest('./dist/'));
});

我是新手gulp,我搜索了一番没有找到答案,可能是我不知道怎么搜索或者没看懂gulp目标。

我不能给你一个完整的答案,因为我没有做过这样的事情,但我会做的是,首先下载(使用 GET 请求)将它保存在一个临时文件夹中,然后获取每个使用 gulp 下载的文件并将它们合并为一个文件,如果它只是 Javascript,则将其压缩。

但问题是您需要先下载它。

PD:您可以使用 fs.unlink 删除临时文件。 PD2:您可以先使用 Gulp 下载它,Gulp 毕竟是 Node ;)

祝你好运!

这个答案取自这里: http://fettblog.eu/gulp-merge-cdn-files-into-your-pipeline/

var gulp = require('gulp');
var source = require('vinyl-source-stream');
var request = require('request');
var merge = require('merge2');
var concat = require('gulp-concat');
var buffer = require('gulp-buffer');

gulp.task('js', function() {

  var jquery = request('http://code.jquery.com/jquery-latest.js') /* 1 */
    .pipe(source('jquery.js'));                                   /* 2 */
  var main = gulp.src('main.js');                                 /* 3 */

  return merge(jquery, main)                                      /* 4 */
    .pipe(buffer())                                               /* 5 */
    .pipe(concat('concat.js'))
    .pipe(gulp.dest('dist'));
})

1) 我们从 jQuery CDN 请求最新的 jQuery 版本。请求包允许流式传输。我们在 return 中得到的是一个可读流。

2) 我们使用 vinyl-source-stream 创建了一个有效的 vinyl 文件对象。这使其与 Gulp

兼容

3) 我们的主文件照例从文件系统中选择

4) merge2 包允许我们合并两个流

5) 两个流的内容都被转换为文本缓冲区,因此 gulp-concat 可以处理它们。