【问题标题】:Gulp loop from json file来自 json 文件的 Gulp 循环
【发布时间】:2017-07-01 09:57:55
【问题描述】:

路径.json

{
  "plguin_a_name": {
    "css": {
      "src/plugin_a/1.css": "dist/plugin_a/1.css",
      "src/plugin_a/2.css": "dist/plugin_a/2.css"
    },
    "js": {
      "src/plugin_a/1.js": "dist/plugin_a/1.js",
      "src/plugin_a/2.js": "dist/plugin_a/2.js"
    }
  },
  "plugin_b_name": {
    "css": {
      "src/plugin_b/1.css": "dist/plugin_b/1.css",
      "src/plugin_b/2.css": "dist/plugin_b/2.css"
    },
    "js": {
      "src/plugin_b/1.js": "dist/plugin_b/1.js",
      "src/plugin_b/2.js": "dist/plugin_b/2.js"
    }
  }
}

如何在 gulp 中从这个 json 文件中循环以将每个插件从 src 复制到 dist 并返回?

我想执行两个任务,仅循环 css/js 或循环“plugin_x_name”内的所有对象。

这个功能需要插件吗?

【问题讨论】:

    标签: json gulp


    【解决方案1】:

    你可以构建一些处理插件/类型数组的函数来过滤那些需要的:

    [{
        "plugin": "plugin_a_name",
        "types": ["js"]
    }, {
        "plugin": "plugin_b_name"
    }]
    

    在上面的子配置中,它只会复制plugin_a的JS文件和plugin_b的所有类型(JS/CSS)。

    然后,您可以遍历所有过滤的插件/类型,并从您的配置 path.json 文件中获取它们(如果存在):

    var gulp = require('gulp'),
        config = require('./path.json');
    
    function copyTask(target) {
        //iterate over config files for the specified type
        for (src in target) {
            console.log("copy from " + src + " to " + target[src]);
            gulp.src(src).pipe(gulp.dest(target[src]));
        }
    }
    
    function copyFilter(pluginFilter) {
        //loop on filter
        for (var obj in pluginFilter) {
            var pluginVal = pluginFilter[obj];
            //check config has plugin
            if (config[pluginVal.plugin]) {
                if (pluginVal.types) {
                    //loop on type type filter
                    for (var type in pluginVal.types) {
                        var typeVal = pluginVal.types[type];
                        // check config has type
                        if (config[pluginVal.plugin][typeVal]) {
                            copyTask(config[pluginVal.plugin][typeVal]);
                        } else {
                            console.log("type " + typeVal + " not found for plugin " + pluginVal.plugin);
                        }
                    }
                } else {
                    //iterate over all the types here
                    for (type in config[pluginVal.plugin]) {
                        copyTask(config[pluginVal.plugin][type]);
                    }
                }
            } else {
                console.log("plugin " + pluginVal.plugin + " not found");
            }
        }
    }
    
    gulp.task('copyFromJson', function() {
        copyFilter([{
            "plugin": "plugin_a_name",
            "types": ["js"]
        }, {
            "plugin": "plugin_b_name"
        }]);
    });
    
    gulp.task('default', ['copyFromJson']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多