就像我们在 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 中得到的一样

java删除非空文件夹

如何创建对象数组或使用模型,就像我们在 JSON 中一样 - Angular/Ionic

Luxon:获取偏移量和直到的数组(就像我们可以在时刻时区中一样)