我正在尝试在我的 TypeScript 应用程序中导入 package.json
:
import packageJson from '../package.json';
我的 tsconfig.json
包含以下内容:
{
"compilerOptions": {
"rootDir": "./src/"
"outDir": "./dist/",
"baseUrl": ".",
"resolveJsonModule": true
}
}
问题是当我编译这个时,我得到
error TS6059: File '/path/to/package.json' is not under 'rootDir' '/path/to/app/src/'. 'rootDir' is expected to contain all source files.
I’m not sure I understand the issue, because both ./src/
and /.dist
have the same parent ..
, so TypeScript could just leave alone the import '../package.json'
它可以 从 rootDir
或 outDir
工作。
无论如何,我尝试了以下方法,但结果不尽如人意:
- 删除
rootDir
编译有效,但dist
将包含dist/src
,我不想要 - remove
outDir
- thensrc
gets polluted with.js
files (and.js.map
ifsourceMap
was true) - 添加
@ts-ignore
编译停止导入的文件../package.json
此限制的解决方法是什么,以将生成的文件保留在 dist
中,并允许从 rootDir
的父目录导入?
原文由 Kousha 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是 可能的,事实证明,这 并不难。
解决方案 不明显 的原因是因为 typescript 依赖于
rootDir
来决定输出的目录结构(请参阅 Typescript’s bossman 的评论),并且只能包含在输出或包依赖项中的代码进口。rootDir
设置为项目的根目录,则package.json
将发送到outDir
的根目录并可以导入。但是然后你编译的src
文件被写入outDir/src
。rootDir
设置为src
,其中的文件将编译到outDir
的根目录。但是现在 编译器没有地方发出package.json
,所以它发出“一个错误,因为项目似乎配置错误”(老板的话)。解决方案: 使用单独的 Typescript 子项目
Typescript 项目 由 tsconfig 文件定义,是独立的,并且 有效地 受其
rootDir
的约束。这是一件非常好的事情,因为它 符合封装原则。您可以有多个项目(例如一个主项目和一组库),每个项目都在它们自己的目录中,并且有它们自己的 tsconfig。它们之间的依赖关系使用 Typescript Project References 在 tsconfig 文件中声明。
我们会将
src
目录和包含package.json
的根目录视为单独的项目。每个都有自己的tsconfig
文件。src
目录自己的项目。./src/tsconfig.json
:./tsconfig.json
:tsc --build src
!这将构建
src
项目。因为它声明了对根项目的引用,所以它也会构建那个项目,但前提是它已过时。因为根 tsconfig 与outDir
具有相同的目录,所以 tsc 将不会对package.json
进行任何操作,它被配置为编译的一个文件。这对 monorepos 来说很棒
您可以通过将模块/库/子项目放在它们自己的子目录中并为它们提供自己的 tsconfig.json 来隔离模块/库/子项目。
您可以使用 Project References 显式管理依赖项,以及模块化构建:
从链接文档:
您可以大大缩短构建时间
强制组件之间的逻辑分离
以新的更好的方式组织您的代码。
这也很容易:
tsconfig
用于共享选项并使用简单的tsc --build
命令构建所有子项目(使用--force
从头开始构建它们src/tsconfig.json
src/common/tsconfig.json
src/projectA/tsconfig.json