【发布时间】:2019-03-13 23:46:11
【问题描述】:
我想利用 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);
有没有办法让它在不将所有输出文件放入同一个目录的情况下工作?
或者,有没有更好的方法来组织我的项目以利用项目引用?
【问题讨论】:
标签: typescript