首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两个具有相似属性的bower.json文件(合并两个具有相似属性的JSON文件)

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

Stack Overflow用户
提问于 2015-05-22 14:51:18
回答 1查看 295关注 0票数 0

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

--请查看我的需求示例:

局部bower.json

代码语言:javascript
复制
{
    "name": "myLocalProject",
    "version": "0.0.1",
    "devDependencies": {
        "angular": "1.1.0"
    },
    "dependencies": {
       "components-font-awesome": "*"
    },
    "resolutions": {
        "angular": "1.3.15"
    }
}

和共享的bower.json

代码语言:javascript
复制
{
    "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

代码语言:javascript
复制
{
        "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中进行合并。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-22 17:01:52

好的,我自己写的函数:

代码语言: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);
};

我的任务是:

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

运行:

代码语言:javascript
复制
$ grunt merge
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30399841

复制
相关文章

相似问题

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