合并两个具有相似属性的bower.json文件(合并两个具有相似属性的JSON文件)

摩西

我想合并两个bower.json文件。一个在我的项目本地,另一个在不同项目之间共享。我需要在运行Bower安装之前合并这两个文件。

请检查示例以了解我的要求:

本地bower.json

{
    "name": "myLocalProject",
    "version": "0.0.1",
    "devDependencies": {
        "angular": "1.1.0"
    },
    "dependencies": {
       "components-font-awesome": "*"
    },
    "resolutions": {
        "angular": "1.3.15"
    }
}

和共享的bower.json

{
    "name": "sharedBowerFile",
    "version": "0.0.3",
    "devDependencies": {
        "angular": "1.3.15",
        "angular-resource": "1.3.15"
    },
    "dependencies": {

    },
    "resolutions": {
        "angular": "1.3.15"
    }
}

和结果bower.json,它将替换本地bower.json

{
        "name": "myLocalProject",           // unchanged
        "version": "0.0.1",                 // unchanged
        "devDependencies": {
            "angular": "1.3.15",             //version updated
            "angular-resource": "1.3.15"     // added to local
        },
        "dependencies": {
            "components-font-awesome": "*"   //stays the same in local
        },
        "resolutions": {
            "angular": "1.3.15"                 
        }
    }

我将为合并创建一个Grunt任务,因此我需要JavaScript中的合并。

摩西

好的,我自己编写了该函数:

var mergeJSON = function (local, shared) {
    var check = true;
    for(var i in shared ) {
        if(typeof(shared[i]) == 'object') {
            for(var j in shared[i]) {
                check =true;
                for (var z in local[i]) {
                    if(j == z){
                        check = false;
                            if( cmp(shared[i][j], local[i][j])>0 ) {
                            //For upgrading the version of dependencies from shared to local
                            grunt.log.writeln("Updating local " + j + " from " + local[i][j] + " to >" + shared[i][j]);
                            local[i][j] = shared[i][j];
                            }else if(cmp(shared[i][j], local[i][j])<0){
                                grunt.log.writeln(j + " in shared bower.json " + " is " + shared[i][j] + " and older than local version " + local[i][j]);

                            }
                    }
                }
                if(check){
                    //add the dependency if does not exist in local
                    local[i][j] = shared[i][j];
                    grunt.log.writeln("Added dependency: " + j + ": " + local[i][j] );
                }
            }
        }
    }
    return JSON.stringify(local,null,4);
};

和我的Grunt任务:

 grunt.task.registerTask('merge','A task to merge local and shared bower.json file', function(){

            var shared = grunt.file.readJSON("/path/to/sharedJSON");
            var local = grunt.file.readJSON("bower.json");
            grunt.file.write('bower.json',mergeJSON(local,shared));
    });

跑步:

$ grunt merge

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

合并两个具有相似列的数据框

合并两个具有相似键的 Javacsript 对象

当具有相似值的列具有相似的行值时合并两个不同的数据帧

如何合并具有相似提交但没有共同祖先的两个分支?

合并两个具有相同列的相似数据框

合并两个具有相似值但日期熊猫不同的不同数据框

具有相似属性的两个不同类的一个函数

创建一个批处理文件以合并两个具有“相似名称”和相同扩展名的文件[Windows]

两个具有相似属性且无法在watir中输入值的文本字段

绑定两个不同类但具有相似属性的对象

合并具有两个公共字段的两个文件

我可以使用join命令来合并在不同列上具有相似性的两个文件吗?

将两个文件合并为具有合并列的单个文件

React Router,两个具有相似网址的路由

将两个列表添加到字典中,并允许合并具有相似标题的值

如何基于具有重复行的公共字段合并/合并两个文件

合并两个对象,但仅合并现有属性

如何合并具有不同属性的两个对象

在c#中合并两个具有相同结构的xml的属性

密码:合并具有相同属性和不同关系的两个节点

如何根据C#中的条件合并两个具有不同属性的列表

如何合并两个具有相同属性的 Pandas 数据框并覆盖相同的行?

合并两个对象数组,并跳过具有相同ID属性的对象

如何合并具有相同属性的两个不同表的值

如何在两个对象数组中合并具有相同键的属性?

合并两个XML文件,这些文件具有一对多关系C#

在两个不同函数中具有两个相似变量的指针

从Python的文本文件中的列中删除前导零,然后将具有两个文本文件的相同字符串的相似行合并为一个

合并具有不同列数且没有相似列的两个数据帧