将外部资源导入grunt

时间:2014-06-12 10:19:33

标签: gruntjs external cdn concat gulp

我尝试使用concat将外部资源导入gruntfile.js。但似乎没有理解我的头脑。我一直在谷歌搜索,但只有我发现的信息是如何cdnify解决方案。

问题是我们在CDN上使用模块,并且只想定义CDN资源而不是从repo下载并在本地链接。

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    concat: {
        dist: {
            src: [
                'https://test.com/cdn/waypoints.js',
                'https://test.com/plugins/hashchange/hashchange-1.4.js',
                'js/ssp-stickit-1.js',
                'js/global.js', 
            ],
            dest: 'js/scripts.js',
        }
    },

}

如果有人知道gulp是否可行,那也是一个选项......

祝你好运

理查德

1 个答案:

答案 0 :(得分:3)

您需要使用首先下载资源然后进行concats的任务。但这引出了一个问题,为什么要使用CDN脚本呢? CDN通常用于客户端可能已缓存的公共资源。如果您连接文件,则不再利用该缓存。其中,您应该使用脚本的公共插座,例如npm,bower,component,github等。

但是如果您仍然想要这样做,这是一个下载和连接的任务/示例:

grunt.initConfig({
  urlconcat: {
    all: {
      src: [
        'https://test.com/cdn/waypoints.js',
        'https://test.com/plugins/hashchange/hashchange-1.4.js',
        'js/ssp-stickit-1.js',
        'js/global.js', 
      ],
      dest: 'js/scripts.js',
    },
  },
});

var fs = require('fs');
var path = require('path');
var request = require('request');
var async = require('async');

grunt.registerMultiTask('urlconcat', function() {
  var done = this.async();
  var options = this.options({
    separator: '\n',
  });
  async.eachSeries(this.files, function(file, next) {
    var out = '';
    async.eachSeries(file.orig.src, function(url, nextUrl) {
      if (grunt.file.exists(url)) {
        // If a file
        grunt.log.writeln('Concatenating ' + url);
        out += grunt.file.read(url) + options.separator;
        nextUrl();
      } else {
        // Otherwise assume a url
        grunt.log.writeln('Downloading ' + url);
        request(url).on('data', function(data) {
          out += data.toString();
        }).on('end', function() {
          out += options.separator;
          nextUrl();
        });
      }
    }, function() {
      grunt.file.write(file.dest, out);
      grunt.log.ok('Wrote ' + file.dest + '.');
      next();
    });
  }, done);
});

grunt.registerTask('default', ['urlconcat']);