From af6c62223335e57e254cd525a9a46f9413957d78 Mon Sep 17 00:00:00 2001 From: josiahchen Date: Fri, 7 Feb 2025 16:18:20 +0800 Subject: [PATCH] feat: allow specify tsconfig name --- docs/config.md | 12 ++++++++++++ src/builder/bundless/dts/index.ts | 6 +++++- tests/config.test.ts | 18 ++++++++++++++++++ .../config-custom-tsconfig-name/.fatherrc.ts | 4 ++++ .../config-custom-tsconfig-name/expect.ts | 4 ++++ .../src/exclude/index.ts | 1 + .../config-custom-tsconfig-name/src/index.ts | 5 +++++ .../tsconfig.build.json | 9 +++++++++ 8 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/config/config-custom-tsconfig-name/.fatherrc.ts create mode 100644 tests/fixtures/config/config-custom-tsconfig-name/expect.ts create mode 100644 tests/fixtures/config/config-custom-tsconfig-name/src/exclude/index.ts create mode 100644 tests/fixtures/config/config-custom-tsconfig-name/src/index.ts create mode 100644 tests/fixtures/config/config-custom-tsconfig-name/tsconfig.build.json diff --git a/docs/config.md b/docs/config.md index fa89f5dc..25a7b7b0 100644 --- a/docs/config.md +++ b/docs/config.md @@ -2,6 +2,18 @@ father 支持以下配置项。 +## 环境变量 + +### FATHER_TSCONFIG_NAME + +- 默认值:tsconfig.name + +在许多项目中,供编辑器使用的 `tsconfig` 配置并不适合直接用来构建,因此可能需要提供一个 `tsconfig.build.json` 来定制构建的规则。 + +```bash +FATHER_TSCONFIG_NAME=tsconfig.build.json father build +``` + ## 公共配置 ### alias diff --git a/src/builder/bundless/dts/index.ts b/src/builder/bundless/dts/index.ts index 5c4f30b8..fb369fff 100644 --- a/src/builder/bundless/dts/index.ts +++ b/src/builder/bundless/dts/index.ts @@ -13,7 +13,11 @@ export function getTsconfigPath(cwd: string) { // ref: https://github.com/nodejs/node/issues/35889 const ts: typeof import('typescript') = require('typescript'); - return ts.findConfigFile(cwd, ts.sys.fileExists); + return ts.findConfigFile( + cwd, + ts.sys.fileExists, + process.env.FATHER_TSCONFIG_NAME, + ); } /** diff --git a/tests/config.test.ts b/tests/config.test.ts index 482bb864..a9d4d753 100644 --- a/tests/config.test.ts +++ b/tests/config.test.ts @@ -32,6 +32,7 @@ beforeAll(() => { afterAll(() => { delete process.env.APP_ROOT; delete process.env.FATHER_CACHE; + delete process.env.FATHER_TSCONFIG_NAME; mockExit.mockRestore(); jest.unmock('@umijs/utils'); }); @@ -81,3 +82,20 @@ test('config: nested extends', async () => { // check result require(`${process.env.APP_ROOT}/expect`).default(fileMap); }); + +test('config: custom tsconfig name', async () => { + // execute build + process.env.FATHER_TSCONFIG_NAME = 'tsconfig.build.json'; + process.env.APP_ROOT = path.join(CASES_DIR, 'config-custom-tsconfig-name'); + await cli.run({ + args: { _: ['build'], $0: 'node' }, + }); + + // prepare file map + const fileMap = distToMap( + path.join(CASES_DIR, 'config-custom-tsconfig-name', 'dist'), + ); + + // check result + require(`${process.env.APP_ROOT}/expect`).default(fileMap); +}); diff --git a/tests/fixtures/config/config-custom-tsconfig-name/.fatherrc.ts b/tests/fixtures/config/config-custom-tsconfig-name/.fatherrc.ts new file mode 100644 index 00000000..f1ac130f --- /dev/null +++ b/tests/fixtures/config/config-custom-tsconfig-name/.fatherrc.ts @@ -0,0 +1,4 @@ +export default { + cjs: {}, + esm: {}, +}; diff --git a/tests/fixtures/config/config-custom-tsconfig-name/expect.ts b/tests/fixtures/config/config-custom-tsconfig-name/expect.ts new file mode 100644 index 00000000..9123ce19 --- /dev/null +++ b/tests/fixtures/config/config-custom-tsconfig-name/expect.ts @@ -0,0 +1,4 @@ +export default (files: Record) => { + expect(files['cjs/index.d.ts']).not.toBeUndefined(); + expect(files['cjs/exclude/index.d.ts']).toBeUndefined(); +}; diff --git a/tests/fixtures/config/config-custom-tsconfig-name/src/exclude/index.ts b/tests/fixtures/config/config-custom-tsconfig-name/src/exclude/index.ts new file mode 100644 index 00000000..ac6f4b17 --- /dev/null +++ b/tests/fixtures/config/config-custom-tsconfig-name/src/exclude/index.ts @@ -0,0 +1 @@ +export default 'exclude'; diff --git a/tests/fixtures/config/config-custom-tsconfig-name/src/index.ts b/tests/fixtures/config/config-custom-tsconfig-name/src/index.ts new file mode 100644 index 00000000..dab29417 --- /dev/null +++ b/tests/fixtures/config/config-custom-tsconfig-name/src/index.ts @@ -0,0 +1,5 @@ +export default async () => { + try { + await import('./exclude/index'); + } catch {} +}; diff --git a/tests/fixtures/config/config-custom-tsconfig-name/tsconfig.build.json b/tests/fixtures/config/config-custom-tsconfig-name/tsconfig.build.json new file mode 100644 index 00000000..273b2c49 --- /dev/null +++ b/tests/fixtures/config/config-custom-tsconfig-name/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "strict": true, + "skipLibCheck": true, + "declaration": true, + "jsx": "react" + }, + "exclude": ["src/exclude/**/*"] +}