5

使用 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只更改键而不是值。

4

1 回答 1

1

您必须搜索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();
}

演示

于 2017-09-04T07:51:09.187 回答