Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过咕哝任务循环_Javascript_Loops_Gruntjs_Css Sprites - Fatal编程技术网

Javascript 通过咕哝任务循环

Javascript 通过咕哝任务循环,javascript,loops,gruntjs,css-sprites,Javascript,Loops,Gruntjs,Css Sprites,目前是Grunt新手,正在考虑设置一个任务,从源文件集合(在公共文件夹结构中)构造CSS精灵 为此,我一直在使用grunt spritesmith: 到目前为止,我的任务是监视一个特定的文件夹,并构建精灵和SCS分区 我的问题:是否可以在不重复每个站点的任务的情况下,循环遍历一组站点名称并将它们传递到下面的任务中 grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), sprite: { no

目前是Grunt新手,正在考虑设置一个任务,从源文件集合(在公共文件夹结构中)构造CSS精灵

为此,我一直在使用grunt spritesmith:

到目前为止,我的任务是监视一个特定的文件夹,并构建精灵和SCS分区

我的问题:是否可以在不重复每个站点的任务的情况下,循环遍历一组站点名称并将它们传递到下面的任务中

grunt.initConfig({

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

    sprite: {

        normal: {
            src: 'site1/images/sprite/1x/*.png',
            destImg: 'site1/images/site1-sprite.png',
            destCSS: 'styles/scss/site1/sprite/_spritesmith.scss',
            algorithm: 'binary-tree',
            padding: 20,
            cssFormat: 'scss',
            engine: 'pngsmith',
            cssOpts: {
                cssClass: function(item) {
                    return '.' + item.name;
                },
            },
        },

        retina: {
            src: 'site1/images/sprite/2x/*.png',
            destImg: 'site1/images/site1-sprite-2x.png',
            destCSS: 'styles/scss/site1/sprite/_spritesmith-retina.scss',
            algorithm: 'binary-tree',
            padding: 40,
            cssFormat: 'scss',
            engine: 'pngsmith',
            cssOpts: {
                functions: false,
            },
        },

    },

});
我收集了大约15-20个站点,因此为标准和视网膜精灵重复两次每个任务很快就会使我的Gruntfile文件膨胀。Javascript不是我的强项,所以到目前为止,所有的解决方案都失败了

任何帮助都将不胜感激


提前谢谢你

您会注意到,
grunt.initConfig
函数接受一个对象文本作为输入,因此您可以在将其传递给initConfig之前按照语法构建一个config对象

差不多

var _ = require('lodash'),
    tasks = require('mytasks'),
    abunchOftasks = require('anotherSetOfTasks');


var combined = _.merge(tasks, abunchOftasks ) //a deep extend

grunt.initConfig(combined)
其中
require('mytasks')
require('anotherSetOfTasks')
返回一个
{}
,其中包含一组已定义的任务、变量等,例如:

//mytasks
module.exports=   { 
  sprite: {
    normal: {
        src: 'site1/images/sprite/1x/*.png',
        destImg: 'site1/images/site1-sprite.png',
        destCSS: 'styles/scss/site1/sprite/_spritesmith.scss',
        algorithm: 'binary-tree',
        padding: 20,
        cssFormat: 'scss',
        engine: 'pngsmith',
        cssOpts: {
            cssClass: function(item) {
                return '.' + item.name;
            },
        },
    },
  }
};

//anotherSetOfTasks
module.exports = {
  sprite: {
    retina: {
        src: 'site1/images/sprite/2x/*.png',
        destImg: 'site1/images/site1-sprite-2x.png',
        destCSS: 'styles/scss/site1/sprite/_spritesmith-retina.scss',
        algorithm: 'binary-tree',
        padding: 40,
        cssFormat: 'scss',
        engine: 'pngsmith',
        cssOpts: {
            functions: false,
        },
    },
  }
};
EDITOops可能有点误解,但基本原则仍然适用。您可以创建一个从站点名称生成任务的函数。我将按照您的建议循环遍历一组名称,并创建一个新的配置,然后在
sprite
属性下将每个对象组合成一个对象。这有意义吗