TypeScript Document how to use tsconfig-related APIs in the wiki

yi0zb3m4  于 3个月前  发布在  TypeScript
关注(0)|答案(7)|浏览(33)

🔎 搜索词

"createProgram" "compiler" "compiler api" "js files createProgram" "js compiler api" "js files compiler" "programmatic compiler js"

🕗 版本与回归信息

请给我的项目:

my-project/
├─ src/
│  ├─ index.js
├─ tsconfig.json

以下代码:

import ts from 'typescript';

let tsConfigFile = ts.findConfigFile(
  process.cwd(),
  ts.sys.fileExists,
  "tsconfig.json"
);
const { config } = ts.readConfigFile(tsConfigFile, ts.sys.readFile);

const program = ts.createProgram(['src/index.js'], config);

program.getSourceFiles().forEach((sf) => {
  console.log(1, sf.fileName);
});

其中 tsconfig.json 看起来像这样:

{
  "compilerOptions": {
    "strict": true,
    "outDir": "./dist-types",
    "target": "ESNext",
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "NodeNext",
    "module": "NodeNext",
    "lib": ["ESNext", "DOM"],
    "declaration": true,
    "emitDeclarationOnly": true,
    "allowJs": true,
    "checkJs": true,
    "skipLibCheck": true,
    "verbatimModuleSyntax": true
  },
  "include": [
    "src/index.js"
  ],
  "exclude": ["node_modules"],
}

输出:
但是 src/index.js 是从源文件中缺失的。我觉得这在过去是有效的,或者至少对普通的js文件也应该有效。

⏯ Playground链接

💻 代码

// Your code here

🙁 实际行为

ts.createProgram 不包含 src/index.js

🙂 预期行为

ts.createProgram 应包含 src/index.js

关于问题的附加信息

  • 无响应*
mum43rcc

mum43rcc1#

已修复:

-const program = ts.createProgram(['src/index.js'], config);
+const program = ts.createProgram(['src/index.js'], config.compilerOptions);
9fkzdhlc

9fkzdhlc2#

建议的修复方法也是错误的;你需要在配置文件加载后进行一次解析:

const { config } = ts.readConfigFile(tsConfigFile, ts.sys.readFile);
const opts = ts.convertCompilerOptionsFromJson(config, ".");
const program = ts.createProgram(['src/index.js'], opts);
8yparm6h

8yparm6h3#

感谢您的更新!这个信息有记录吗?我发现很难找到关于这个的信息,并且不确定在哪里搜索。

uurv41yg

uurv41yg4#

我们确实需要将这个添加到 https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API - any 产生的 readConfigFile 中,因为它们经常让人们陷入困境。

jgwigjjp

jgwigjjp5#

建议的修复方法也是错误的;你需要在配置文件加载后进行一次解析:

const { config } = ts.readConfigFile(tsConfigFile, ts.sys.readFile);
const opts = ts.convertCompilerOptionsFromJson(config, ".");
const program = ts.createProgram(['src/index.js'], opts);

我实际上尝试了这个,但对我不起作用。我不得不这样做:

const { config } = ts.readConfigFile(configFile, ts.sys.readFile);
- const opts = ts.convertCompilerOptionsFromJson(config, ".");
+ const {options, errors} = ts.convertCompilerOptionsFromJson(config.compilerOptions, ".");
- const opts = ts.convertCompilerOptionsFromJson(config, ".");
+ const program = ts.createProgram(['src/index.js'], options);
i2byvkas

i2byvkas6#

是的,using-the-compiler-api页面确实需要一些改进。

u2nhd7ah

u2nhd7ah7#

嗯,结果发现那实际上是在丢弃我的$x^{checkJs}$和$x^{allowJs}$,并对一些字符串进行一些奇怪的数字转换。这是我最后找到的方法。

$x^{

const configFileName = ts.findConfigFile(
  "./",
  ts.sys.fileExists,
  "tsconfig.json"
);
const configFile = ts.readConfigFile(configFileName, ts.sys.readFile);
const {options} = ts.parseJsonConfigFileContent(
  configFile.config,
  ts.sys,
  "./"
);

let program = ts.createProgram(fileNames, options);

}$

相关问题