- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想使用 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 ,如果我没理解错的话,就是给整个复合工程设置一个主输出目录,里面有Shared
和A
子目录,所以源文件和输出文件可以有相同的相对布局。我不知道那是不是你不想做的意思。
我知道的唯一其他选择是使用非相对导入让每个组件导入其他组件(在您的情况下,您只需让 A
导入 Shared
)指向输出文件(即 A/a.ts
将导入类似 Shared/dist/shared
的路径)。由于您使用的是非相对导入,因此出现在源文件或相应输出文件中的相同导入路径将解析为相同的目标输出文件。在您构建复合项目之前,导入不会在您的 IDE 中解析:这是一个 known limitation .自 tsc
doesn't rewrite imports ,您需要设置运行时环境和/或使用 bundler 来处理非相对导入,并在必要时设置 baseUrl
和 paths
TypeScript 编译器匹配的选项。
如果需要,我很乐意帮助您了解这两种方法的详细信息;让我知道你在哪里卡住了。
关于typescript - TypeScript 3 中的项目引用带有单独的 `outDir`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52716934/
我在 Visual Studio 2013 中有一个 C++/CLI dll 项目,我试图在其中更改输出目录。我已将项目属性 > 常规中的“输出目录”设置设置为 $(SolutionDir)Stage
我是 tsconfig.json 配置的新手,但我只是想像它应该的那样将我的 src 目录编译为编译的 javascript,但它只是没有创建 outDir 包含编译代码的文件夹。 这是我的tscon
我正在查看我的 Visual Studio 项目的属性并看到以下内容: $(OutDir)\$(ProjectName).exe 我很好奇visual studio如何知道outdir的值(value
我正在尝试为 OutDir 设置默认位置和 IntDir供解决方案中的所有项目使用。如:$(SolutionDir)bld\$(Platform)\$(ProjectName)\$(Configura
我遇到一个问题,编译器提示以下内容:无法写入文件“path/file.json”,因为它会覆盖输入文件。我做了一些挖掘,大多数解决方案建议使用 outDir 来修复它。该解决方案工作正常,但我不确定要
使用新的 SDK 样式 csproj 格式时,可以使用 以分号分隔的目标框架列表的元素,以为其构建项目。 这会在构建输出文件夹中为每个目标框架生成一个子文件夹: 但是,当在 msbuild 命令行上传
使用新的 SDK 样式 csproj 格式时,可以使用 以分号分隔的目标框架列表的元素,以为其构建项目。 这会在构建输出文件夹中为每个目标框架生成一个子文件夹: 但是,当在 msbuild 命令行上传
我有一个小项目,我在其中使用 CMake 系统从 C++ 文件创建一个 Python 模块。在 CMakeLists.txt 文件中,我按如下方式集成了 Swig: # only the Swig p
我正在尝试将 TypeScript 与 React Native 结合使用。 这是我的tsconfig.json: { "compilerOptions": { "target
我有以下项目结构: root -src -lib index.ts -example test.ts 我想将 outDir 设置为根文件夹 /,这样我就可以
我有以下 tsconfig.json,我想将转译后的输出放在 build/ 文件夹中 { "compileOptions": { "module": "amd",
我想使用 TypeScript 3.1 中的项目引用功能。我项目编译后的目录结构原来是这样的: . ├── A │ ├── a.ts │ ├── dist │ │ ├── A │
有谁知道如何配置 Erlang emacs 模式,以便编译缓冲区 [C-c C-k] 将束文件写入 ebin 目录而不是当前目录? 谢谢! 最佳答案 你可能想看看 Erlang 问题邮件列表上的这个线
我对非 ts 模块(文本 Assets )有一个问题,它们没有按照 tsconfig.json 中的配置转移到 outDir(或者我做得不对)。 这是最简单的复制案例 // /src/main.ts
我有一个tsconfig.json,它指定了一个outDir。原因是我想将生成的 JavaScript 输出与 TypeScript 源分开。 所以: "compilerOptions": {
是否可以设置到不同磁盘驱动器的绝对路径,比如我在 D:\work\project\tsconfig.json 上工作,我希望它在 c:\work\release.js 中编译如果我写 "outDir"
我有一个简单的应用程序,有两个 .ts 文件,我使用以下 tsconfig.js 文件编译 { "compilerOptions": { "target": "ES5", "mod
在 package.json 中使用时,我似乎无法让 outDir 标志工作。目录结构非常简单:根级别的 tsconfig.json,以及一个 src/ 目录和一个 index.ts 文件以及代表其他
我刚刚完成了 Angular CLI Heroes 教程 here 。我已遵循所有教程并完成了 HTTP 教程。 关于 Angular 4 和 TypeScript 的所有精彩学习,但在整个类(cla
我正在尝试构建我的简单 npm 包,一切都很好。然而,当我尝试构建它时,它出了点问题。 我得到以下信息: - dist - package.json - src - inde
我是一名优秀的程序员,十分优秀!