3

我正在尝试使用 Babel 更新 JS 配置对象。为此,我创建了一个以这种方式使用的 Babel 插件:

const transform = require('@babel/standalone').transform


const newCode = transform(code, {
  plugins: [
    [
      myBabelPlugin, {
        scripts: {
          action: 'create:merge',
          value: ['path/to/my/script.js']
        },
        someFunc: {
            action: 'create',
            function a(arg) { return true; }
        }
      }
    ]
  ]
}).code

在内部,它调用一个toAst函数来迭代文字元素并将它们作为 AST 返回。我设法让它在某种程度上适用于函数,但我正在寻找一种更好的方法来处理函数——无论它们是匿名函数、箭头函数等。

当前的“函数到 AST”函数

if (typeof elem === 'function') {
  const ast = babylon.parse(elem.toString(), {
    plugins: [
      babelPluginTransformRuntime,
      babelPluginTransformArrowFunction
    ]
  })
  const { params, body } = ast.program.body[0]
  return t.functionExpression(
    null,
    params,
    body
  )
}

我这样做的原因是返回程序主体会返回如下内容:


const config = {
  elem: function () {
    function myFunction() {
      ...
    }
  }
}

但感觉真的很hacky。它还与匿名函数中断。任何有关正在发生的事情甚至代码的线索将不胜感激。

谢谢✌️

4

0 回答 0