Импортировать внешний ресурс для grunt

Я пытаюсь импортировать внешний ресурс в gruntfile.js с помощью concat. Но, похоже, я не обдумываю это. Я гуглил, но единственная информация, которую я нашел, - это как найти решение.

Дело в том, что мы используем модули в CDN и хотели бы просто определить ресурс CDN вместо загрузки из репозитория и создать локальную ссылку.

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',
        }
    },

}

Если кто-нибудь знает, возможно ли это с глотком, это тоже вариант....

С наилучшими пожеланиями

Ричард

1 ответ

Решение

Вам нужно будет использовать задачу, которая сначала загружает ресурс, а затем завершает работу. Но возникает вопрос, зачем использовать сценарий 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']);
Другие вопросы по тегам