jscodeshift更改对象的文字值

时间:2017-04-11 08:21:59

标签: javascript jscodeshift

使用jscodeshift,我该如何转换

// Some code ...

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

// Some more code ...

// Some code ...

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

// 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();
}

但我最终以

结束
// Some code ...

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

// Some more code ...

表示replaceWith只更改密钥而不是值。

1 个答案:

答案 0 :(得分: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