json - 来自 json 文件的 Gulp 循环

标签 json gulp

路径.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”中的所有对象。

这个功能需要一些插件吗?

最佳答案

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

[{
    "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']);

关于json - 来自 json 文件的 Gulp 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44859615/

相关文章:

python - 批量创建 JSON 配置文件

json - Web 服务 C# JSON 到 Arduino

javascript - 在 browserify 之前预处理 js

report - 如何制作 Gulp 代码覆盖徽章?

javascript - gulp browser-sync 不提供 json 文件

node.js - 引用错误 : internalBinding is not defined

java - XML 文件转 Json (org.json)

python - 如何将 json 文件中的两个变量合并为一行

javascript - 传单 : icon based on data source

javascript - gulp - 连接到现有文件