Microsoft/TypeScript

TypeScript 4.2 caches cwd between builds when using the programatic api

Open

#43,120 创建于 2021年3月6日

在 GitHub 查看
 (1 评论) (0 反应) (0 负责人)TypeScript (48,455 star) (6,726 fork)batch import
BugDomain: tsc -bHelp Wanted

描述

Bug Report

When using TypeScript 4.2 from the programmatic API, it seems to cache the CWD between runs. I don't think this is the desired effect. This can result in "Cannot read file '..../tsconfig.json'"

🔎 Search Terms

cwd, current working directory

🕗 Version & Regression Information

  • This bug started in 4.2.2.
  • Earlier versions as far back as 3.7 work as expected.
  • Nightly typescript@next also has this problem.

⏯ Playground Link

Programmatic API, so no playground link available. I made a small repro repo: ts-cwd-issue.zip

Unzip, npm i and node compile.js.

💻 Code

// @ts-check
const ts = require('typescript');
const path = require('path');

async function build(tsconfig) {
    return new Promise(res => {
        const compiler = ts.createSolutionBuilderWithWatch(
            ts.createSolutionBuilderWithWatchHost(ts.sys,
                undefined,
                (error) => console.error(tsconfig,'error: ', error.messageText),
                (status) => console.log(tsconfig,'status:', status.messageText),
                (summary) => {
                    console.log(tsconfig, 'summary: ', summary.messageText);
                    res();
                }
            ),
            [tsconfig],
            {}
        );
        compiler.build();
    });
}

async function main() {
    process.chdir(path.resolve(__dirname, 'sample-a'));
    await build('tsconfig.a.json')
    process.chdir(path.resolve(__dirname, 'sample-b'));
    await build('tsconfig.b.json')
}

main().catch(console.error);

🙁 Actual behavior

$ node compile.js
tsconfig.a.json summary:  Found 0 errors. Watching for file changes.
tsconfig.b.json error:  Cannot read file '.../sample-a/tsconfig.b.json'.
tsconfig.b.json summary:  Found 1 error. Watching for file changes.

🙂 Expected behavior

$ node compile.js
tsconfig.a.json summary:  Found 0 errors. Watching for file changes.
tsconfig.b.json summary:  Found 0 errors. Watching for file changes.

贡献者指南

TypeScript 4.2 caches cwd between builds when using the programatic api · Microsoft/TypeScript#43120 | Good First Issue