Javascript 如何使用Babel将文字函数转换为AST
我正在尝试使用Babel更新JS配置对象。 为此,我创建了一个巴别塔插件,其使用方式如下:Javascript 如何使用Babel将文字函数转换为AST,javascript,babeljs,abstract-syntax-tree,babel-babylon,Javascript,Babeljs,Abstract Syntax Tree,Babel Babylon,我正在尝试使用Babel更新JS配置对象。 为此,我创建了一个巴别塔插件,其使用方式如下: const transform = require('@babel/standalone').transform const newCode = transform(code, { plugins: [ [ myBabelPlugin, { scripts: { action: 'create:merge', value:
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() {
...
}
}
}
但感觉真的很不舒服。它还与匿名函数断开。任何关于正在发生的事情或代码的线索都将不胜感激
谢谢✌️