首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历Grunt任务

遍历Grunt任务
EN

Stack Overflow用户
提问于 2014-01-24 22:08:51
回答 1查看 566关注 0票数 1

目前,Grunt还处于新的阶段,正在研究如何设置一个任务,以便从源文件集合(在公共文件夹结构中)构造CSS精灵。

要做到这一点,我一直在使用咕噜-史密斯:https://npmjs.org/package/grunt-spritesmith

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

我的问题:是否可以循环遍历一系列站点名称并将它们传递到下面的任务中--而不重复每个站点的任务?

代码语言:javascript
复制
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不是我的强项,因此到目前为止,每个解决方案都失败了。

任何帮助都将不胜感激。

提前谢谢你!

EN

Stack Overflow用户

发布于 2014-01-24 22:21:00

您将注意到,grunt.initConfig函数以一个对象文本作为输入,因此您可以语法地构建一个配置对象,然后再将它传递给initConfig。

就像这样

代码语言:javascript
复制
var _ = require('lodash'),
    tasks = require('mytasks'),
    abunchOftasks = require('anotherSetOfTasks');


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

grunt.initConfig(combined)

其中,require('mytasks')require('anotherSetOfTasks')返回具有一组定义的任务、vars等的{},例如:

代码语言:javascript
复制
//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,
        },
    },
  }
};

编辑 Oops可能有一点误解,但基本原则仍然适用。您可以创建一个从站点名称生成任务的函数。我将按照您的建议循环遍历一个名称数组,并创建配置的一个新部分,然后将每个对象组合到sprite属性下面的单个对象中。这有意义吗?

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21343396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档