【问题标题】:How to parse a list of named ES6/ES2015 exports from a module?如何解析模块中命名的 ES6/ES2015 导出列表?
【发布时间】:2017-11-22 10:38:14
【问题描述】:

我想解析导出语句的 javascript 文件的文本内容,并从模块中提取命名导出列表。

为什么?我正在寻找扩展 import-js 的 Meteor 环境以了解本地包,并且主要阻止似乎能够解析和识别每个包的命名导出。

现有实现标识了包名、路径和 isopack,因此我可以轻松获取每个包的 mainModule 的路径。我只需要帮助解析该文件以获取导出语句。

【问题讨论】:

  • 为了提供额外的上下文,你可以包括一些你尝试过的策略

标签: javascript meteor ecmascript-6


【解决方案1】:

您可以使用babylon 生成输入文件的JavaScript AST,然后检查ExportDefaultDeclaration、ExportNamedDeclaration 和ExportAllDeclaration 的顶层。举个例子:

export default test;
export { foo as bar, baz };
export let lol = "okay then"; // also var, const
export * from 'import-js';

Babylon 7 generates this AST:

您可以使用this list of various supported syntaxes for export 和the explorer 来查看Babylon 预计会生成什么,然后您可以使用生成的JSON 来获取您需要的解析信息。

【讨论】:

  • 干杯,关于解析语法树以获取所有导出的任何建议?特别是当 ExportAllDeclaration 指向另一个文件时?
  • @FrederickStark 我不明白您对节点“指向另一个文件”的评论。它只是一个包含语法信息的普通对象,但您可以使用this documentation 来了解属性的含义。
  • 与其他类型不同如果您查看ExportAllDeclaration,它不包含任何命名要导出的内容的标识符,因此您需要解析该语句引用的文件并继续沿链向下直到已发现所有出口。只是问你是否有建议这样做的方法
  • 错了。检查source 属性,如AST explorer 和文档中所示!包含标识符...
  • If you look at the explorer,ExportAllDeclaration 没有标识符(从其他文件命名导出)。 source 仅包含来自 export * from ***'./foo'*** 的“发件人”字符串。我最终通过将引用的文件送回解析器来解决它。只是希望你对最好的方法有建议。不必说我错了,当它只是一个误解时使用大写和感叹号来粗鲁
猜你喜欢
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
相关资源
最近更新 更多