Bla*_*kus 6 typescript typescript-compiler-api
我正在尝试使用 ts API 解析 TypeScript 程序的 AST。我可以轻松创建程序并获取 AST,但奇怪的是,并非所有导入的模块都可以访问。
考虑以下文件结构a.tsx作为我的入口点:
.
??? a.tsx
??? b
? ??? index.tsx
??? c.tsx
Run Code Online (Sandbox Code Playgroud)
如果我使用完整的文件名(不包括扩展名)导入模块,它可以正常工作:
import { c } from './c';
// or
import { b } from './b/index';
Run Code Online (Sandbox Code Playgroud)
但是在b模块情况下,如果我删除该index部分(这是一个完全有效且有效的语法),该模块将从程序源中消失。
import { b } from './b';
Run Code Online (Sandbox Code Playgroud)
创建程序并解析 AST 的代码如下:
import * as ts from 'typescript';
const options: ts.CompilerOptions = {
target: ts.ScriptTarget.ES2015,
jsx: ts.JsxEmit.Preserve,
};
const program = ts.createProgram([process.argv[2]], options);
const sources = program.getSourceFiles();
sources.forEach((source: ts.SourceFile) => {
const path_ = source.fileName;
if (path_.indexOf('node_modules') === -1) {
console.log(`parsing ${path_}`);
}
});
Run Code Online (Sandbox Code Playgroud)
通过program.getSources()调用返回源。当a.tsx文件像我的第一个片段一样导入模块时,我可以访问源中的所有三个节点,但如果我使用第二种形式 ( import .. from './b'),则源仅包含模块a和c.
是否有一些特定的选项可以通过createProgram()?
TypeScript 版本是 2.4.2。
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |