1

我对 jscodeshift 很陌生。是否可以逐行获取代码。

export default function transformer(file, api) {
  const j = api.jscodeshift;


  return j(file.source).forEach(p => {
    p.value.program.body.forEach(p => {
        console.log(p)
    });

  }).toSource();
}

但是这种方法的问题在于我无法对变量中获得的结果应用转换p。例如。对于下面的输入

    var a = "hello";
    var b = "stackoverflow";
    var c = a + b;

我需要逐行转换内容。是否可以在 jscodeshift 中逐行应用转换。

4

1 回答 1

2

您可以使用.get().node.program.body和循环: http: //astexplorer.net/#/gist/fea38e8a6837d227fd02cb1297824280/be3b1fb941ee3e6dfbe4eea86610a3ad48e2b511

这个:

const transformer = (file, api) => {
    const j = api.jscodeshift;
    const root = j(file.source);

    root.get().node.program.body.map((line) => {
        line.kind = "const";
    });
    return root.toSource();
};
export default transformer;

变换:

var a = "hello";
var b = "stackoverflow";
var c = a + b;

至:

const a = "hello";
const b = "stackoverflow";
const c = a + b;

你没有要求精确的转换,所以我只是提供了一个变形每一行的例子。

但是您应该注意,抽象语法树的优点是您不需要逐行进行。如果您能够提供您正在寻找的转换,那么社区可能会为您提供比逐行循环更好的解决方案。

于 2018-03-19T18:38:07.403 回答