我正在尝试使用 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。它还与匿名函数中断。任何有关正在发生的事情甚至代码的线索将不胜感激。
谢谢✌️