我正在使用 Grunt 来执行构建任务,并且我已经细分了串联活动。特别是,我有一个用于 Bootstrap 的 concat,一个用于 DataTables,然后是一个将它们加上 jQuery 并尝试制作一个整体的 concat。
我很确定我的失败是由于异步调用造成的。我试图在“炼狱”中的文件存在之前将它们连接起来!但是,除了创建一个重复所有已完成的连接的新任务之外,我不确定如何解决这个问题。
这是我将其可视化的方式,但是我非常清楚该任务的异步性质使其成为不可能:
grunt.initConfig({
/* ... other initConfig stuff ... */
concat: {
options: {
stripBanners: false
},
bootstrapJS: {
banner: '/*!\n' +
' * Bootstrap v<%= bootstrapInfo.version %> (<%= bootstrapInfo.homepage %>)\n' +
' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= bootstrapInfo.author %>\n' +
' * Licensed under the <%= bootstrapInfo.license %> license\n' +
' */\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
src: [
'/lib/bootstrap/js/transition.js',
'/lib/bootstrap/js/alert.js',
'/lib/bootstrap/js/button.js',
'/lib/bootstrap/js/carousel.js',
'/lib/bootstrap/js/collapse.js',
'/lib/bootstrap/js/dropdown.js',
'/lib/bootstrap/js/modal.js',
'/lib/bootstrap/js/tooltip.js',
'/lib/bootstrap/js/popover.js',
'/lib/bootstrap/js/scrollspy.js',
'/lib/bootstrap/js/tab.js',
'/lib/bootstrap/js/affix.js'],
dest:
'purgatory/js/bootstrap.js'
},
dataTablesJS: {
src: [
'/lib/js/datatables/jquery.dataTables.js',
'/lib/js/datatables/dataTables.bootstrap.js'],
dest:
'purgatory/js/dataTables.js'
},
noCompMonolith: {
src: [
'lib/jquery.js',
'purgatory/js/bootstrap.js',
'purgatory/js/dataTables.js'],
dest:
'dev/js/application_monolith.js'
}
}
});
或者尝试变得聪明并使用标签,noCompMonolith 看起来更像这样(如果我正确格式化标签,这实际上是一样的):
noCompMonolith: {
src: [
'lib/jquery.js',
'<%= concat.dataTablesJS.dest %>',
'<%= concat.bootstrapJS.dest %>'],
dest:
'dev/js/application_monolith.js'
}
我也尝试使用一个函数,但是 initConfig 必须对正确的数组进行完整性检查,而不是返回数组的函数。或者,我有语法错误!在这种情况下,我实际上会尝试连接整个以前的集合,但不要复制粘贴,而是尝试聪明一点:
noCompMonolith: {
src: function() {
var src = [];
src.push.apply(src, 'lib/jquery.js');
src.push.apply(src, concat.bootstrapJS.src);
src.push.apply(src, concat.dataTablesJS.src);
return src;
},
dest: 'dev/js/application_monolith.js'
}
底线:
分别连接不同的“组件”。当我开发 Grunt 任务时,我可能想要 Bootstrap 而不是单体。或 DataTables 作为单独的文件。我想在“炼狱”中将我的担忧分开,直到我对它们做更多的事情。
对这些不同的“组件”进行第二次连接
在 Grunt 中是否有已知的技术可以做到这一点?我的一些想法是否正确,但语法错误?