gpt4 book ai didi

typescript - TypeScript 3 中的项目引用带有单独的 `outDir`

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:23 25 4
gpt4 key购买 nike

我想使用 TypeScript 3.1 中的项目引用功能。我项目编译后的目录结构原来是这样的:

.
├── A
│   ├── a.ts
│   ├── dist
│   │   ├── A
│   │   │   └── a.js
│   │   └── Shared
│   │   └── shared.js
│   └── tsconfig.json
└── Shared
├── dist
│   └── shared.js
├── shared.ts
└── tsconfig.json

Shared 目录的内容:

shared.ts:

export const name = "name";

tsconfig.json:

{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "dist",
"strict": true
}
}

A 目录的内容:

a.ts:

import { name } from "../Shared/shared"; 

console.log(name);

tsconfig.json:

{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "dist",
"strict": true
}
}

我可以通过在 A 目录中运行 node dist/A/a.js 来成功运行它。

我不喜欢的是所有内容都被复制到 A 的输出目录中。我认为这里的项目引用可以解决这个问题。

为了启用项目引用,我将以下行添加到 Shared/tsconfig.json

"composite": true

以及 A/tsconfig.json 的以下内容:

"references": [
{ "path": "../Shared" }
]

现在我编译的时候,目录结构是这样的,这是我所期望的:

.
├── A
│   ├── a.ts
│   ├── dist
│   │   └── a.js
│   └── tsconfig.json
└── Shared
├── dist
│   ├── shared.d.ts
│   └── shared.js
├── shared.ts
└── tsconfig.json

但是,当我在 A 目录中运行 node dist/a.js 时,出现以下错误:

module.js:538
throw err;
^

Error: Cannot find module '../Shared/shared'

原因是在生成的a.js文件中,没有正确解析导入模块的引用:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var shared_1 = require("../Shared/shared");
console.log(shared_1.name);

有没有办法在不将所有输出文件放入同一目录的情况下让它工作?

或者,是否有更好的方法来组织我的项目以利用项目引用?

最佳答案

确实,让相对导入路径同时适用于您的源文件和输出文件是一件很痛苦的事情。 official recommendation ,如果我没理解错的话,就是给整个复合工程设置一个主输出目录,里面有SharedA子目录,所以源文件和输出文件可以有相同的相对布局。我不知道那是不是你不想做的意思。

我知道的唯一其他选择是使用非相对导入让每个组件导入其他组件(在您的情况下,您只需让 A 导入 Shared)指向输出文件(即 A/a.ts 将导入类似 Shared/dist/shared 的路径)。由于您使用的是非相对导入,因此出现在源文件或相应输出文件中的相同导入路径将解析为相同的目标输出文件。在您构建复合项目之前,导入不会在您的 IDE 中解析:这是一个 known limitation .自 tsc doesn't rewrite imports ,您需要设置运行时环境和/或使用 bundler 来处理非相对导入,并在必要时设置 baseUrlpaths TypeScript 编译器匹配的选项。

如果需要,我很乐意帮助您了解这两种方法的详细信息;让我知道你在哪里卡住了。

关于typescript - TypeScript 3 中的项目引用带有单独的 `outDir`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52716934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com