0

我正在使用 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'
}

底线:

  1. 分别连接不同的“组件”。当我开发 Grunt 任务时,我可能想要 Bootstrap 而不是单体。或 DataTables 作为单独的文件。我想在“炼狱”中将我的担忧分开,直到我对它们做更多的事情。

  2. 对这些不同的“组件”进行第二次连接

在 Grunt 中是否有已知的技术可以做到这一点?我的一些想法是否正确,但语法错误?

4

1 回答 1

0

天哪。所以这只是错别字。我一开始就有正确的方法。

我在我的src数组中用一个前导斜杠开始我的路径。显然这样不好。我没有注意到它正在生成 0 字节的 Bootstrap 和 DataTables 文件。当你连接空文件时......嗯......结果很明显。

作为我自己的疏忽的记录,这是一个正确且有效的concat对象:

concat: {
    options: {
        stripBanners: false
    },
    bootstrapJS: {            
        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/datatables/js/jquery.dataTables.js',
            'lib/datatables/js/dataTables.bootstrap.js'],
        dest: 'purgatory/js/dataTables.js'
    },
    noCompMonolith: {
        src: ['lib/jquery.js', '<%= concat.bootstrapJS.dest %>', '<%= concat.dataTablesJS.dest %>'],
        dest: 'dev/js/application_monolith.js'
    }
}
于 2015-06-30T15:50:55.393 回答