2017-04-11 1 views
2

, 어떻게jscodeshift 변경 객체 리터럴 값 jscodeshift을 사용하여

// Some code ... 

const someObj = { 
    x: { 
    foo: 4, 
    bar: '5' 
    } 
}; 

// Some more code ... 

// Some code ... 

const someObj = { 
    x: { 
    foo: 3 
    } 
}; 

// Some more code ... 

을 변환 할 수 있습니까?

나는

module.exports = function(file, api, options) { 
    const j = api.jscodeshift; 
    const root = j(file.source); 

    return root 
     .find(j.Identifier) 
     .filter(path => (
      path.node.name === 'someObj' 
     )) 
     .replaceWith(JSON.stringify({foo: 4, bar: '5'})) 
     .toSource(); 
} 

을 시도했지만 난 그냥 replaceWith 그냥 대신 값의 키를 변경 제안

// Some code ... 

const someObj = { 
    {"foo": 4, "bar": "5"}: { 
    foo: 3 
    } 
}; 

// Some more code ... 

와 끝까지.

답변

0

당신은 ObjectExpression에 대한보다는 Identifier를 검색 할 수 있습니다

module.exports = function(file, api, options) { 
    const j = api.jscodeshift; 
    const root = j(file.source); 

    j(root.find(j.ObjectExpression).at(0).get()) 
    .replaceWith(JSON.stringify({ 
     foo: 4, 
     bar: '5' 
    })); 

    return root.toSource(); 
} 

Demo