Mat*_*bst 9 typescript ts-node
我们有一个像这样的代码库设置:
-A
--utils
---index.ts
--index.ts
--tsconfig.json
-B
--utils
---index.ts
--index.ts
--tsconfig.json
-tsconfig.json
Run Code Online (Sandbox Code Playgroud)
我们的根tsconfig.json包含以下内容:
"paths": {
"A/*": ["A/*"],
"B/*": ["B/*"],
},
Run Code Online (Sandbox Code Playgroud)
每个包tsconfig.json包含以下内容:
"paths": {
"utils/*": ["./utils/*"],
},
Run Code Online (Sandbox Code Playgroud)
这适用于我们当前的目的,因为我们目前只使用 TS 进行类型检查,但我们实际上使用 Babel 生成构建,它alias在各种.babelrc文件的属性中具有类似的设置。
我们希望开始使用ts-node(或等效的)运行代码,但在运行时遇到了问题,TS 不知道如何解析模块。例如:
// A/index.ts
import { someUtil } from 'utils'
export const someFunc() => someUtil();
Run Code Online (Sandbox Code Playgroud)
// B/index.ts
import { someFunc } from 'A';
Run Code Online (Sandbox Code Playgroud)
当我们运行时,npx ts-node ./B/index.ts我们收到一条错误消息,提示“无法找到模块 'utils'。
我们知道我们可以通过将所有内容提升到 root 来实现这一点tsconfig.json,但是import { someUtil } from 'A/utils当您已经在包 A 中时,这样做似乎是多余的。
有没有办法以我们现有的方式使用路径?我们还阅读了一些关于项目引用的内容并尝试过,但似乎并没有让我们取得任何进展。
Wil*_*ena 12
tsconfig.json在每个项目的文件内,您应该extends在根目录上使用tsconfig,如下所示:
// A/tsconfig.json
{
"extends": "../tsconfig.json",
...
}
Run Code Online (Sandbox Code Playgroud)
这样所有的子项目都会继承其他通用包的路径。
我认为您甚至可以utils在根上定义路径,这样您也不必重复。
有关该选项的更多信息请参见extends此处:
https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#tsconfig-bases
更新
您还需要使用这个库:
https://www.npmjs.com/package/tsconfig-paths
并在您使用的属性的脚本package.json中: 。ts-nodescriptsts-node ... -r tsconfig-paths/register ... index.ts
该库将读取 中的包ts-config.json并将它们放入 中node_modules,这样当您使用 node 或 ts-node 运行时,其他包就可以找到它们。
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |