就像我们在 babelTypes 中一样,将 JavaScript 代码转换为 AST 表示
Posted
技术标签:
【中文标题】就像我们在 babelTypes 中一样,将 JavaScript 代码转换为 AST 表示【英文标题】:Javascript code to AST representation as we do in babelTypes 【发布时间】:2021-09-10 14:37:16 【问题描述】:每次要修改都得写t.importDeclaration([t.importDefaultSpecifier(t.identifier(`$importcomponentName`))], t.stringLiteral(`../components/$importcomponentName`))
这只是一个导入语句。例如。 ,如果我想生成一个完整的组件,我必须编写一个冗长的代码,在一个文件中太长并且耗时。我们有什么捷径可以通过一些递归或库或任何工具来做到这一点吗?
【问题讨论】:
【参考方案1】:Babel 为这种类型的东西提供了@babel/template
,所以你可以替换
const decl = t.importDeclaration(
[t.importDefaultSpecifier(t.identifier(`$importcomponentName`))],
t.stringLiteral(`../components/$importcomponentName`)
);
与
const decl = template.ast`
import $importcomponentName from "$`../components/$importcomponentName`";
`;
【讨论】:
如果我想要一个大字符串怎么办,假设一个完整的组件传入模板。 ast? @TheRakeshPurohit 这不是我通常希望注入的东西,但您插入的内容完全取决于您。如果我这样做,我可能会在一些普通的 JS 帮助文件中编写所有组件代码,然后如果您想要注入,则将导入注入该帮助文件并调用帮助函数来创建组件。 我们可以用这个答案来做到这一点。谢谢。【参考方案2】:Loganfsmyth 的答案的替代方案,而不是使用@babel/template
,您可以使用@babel/generator
:
import babelGenerate from '@babel/generator';
const decl = babelGenerate(
`import $importcomponentName from '$`../components/$importcomponentName`';`
);
【讨论】:
我觉得 Loganfsmyth 的回答很灵活。以上是关于就像我们在 babelTypes 中一样,将 JavaScript 代码转换为 AST 表示的主要内容,如果未能解决你的问题,请参考以下文章
如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?
我想用键盘在 div 上选择文本(就像我们用鼠标选择文本一样)
Snowflake 中的存储过程能否提供一个表值输出,就像我们在 SQL Server 中得到的一样