我尝试使用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是否可行,那也是一个选项......
祝你好运
理查德
答案 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']);