我正在尝试构建一个基于打字稿的项目,该项目应该提供一个库来定义供系统其他组件使用的服务。为了轻松测试这些服务,我想提供一个简单的服务器,用一个类似REST的基本API来封装这些服务。
该软件包使用tsc
构建良好,因为某些路径未正确解析,所以我无法运行测试或运行测试服务器:
Cannot find module '@services/hi' from 'app.test.ts'
我的tsconfig.json
中具有以下定义:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": false,
"target": "es6",
"declaration": true,
"noImplicitAny": true,
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"strict": true,
"outDir": "build",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/",
"services/types/*",
"server/types/*"
],
"@services/*": [
"services/*"
]
}
},
"files": [
"index.ts"
],
"include": [
"services/**/*",
"server/**/*"
]
}
我使用以下方法引用服务文件:
import { hi } from "@services/hi";
我可以看到这些引用未在最终的JS代码中重写,这是问题的直接原因。我不了解的是如何正确使用这些虚拟路径,以防止使用../../
相对引用使我的代码混乱?
最终目标是能够将这些服务打包为一个lib,该lib将托管在某个地方或从git进行引用,或者使用file://
中的package.json
引用来最大化模块化。
PS:示例项目代码在这里:https://github.com/abailly/sample-ts
更新:
因此,看来paths
中的tsconfig.json
配置对基础node
程序的实际文件加载没有影响,这意味着加载程序 也必须被配置为处理相同的路径解析机制,这种机制类似于PITA。存在https://www.npmjs.com/package/tsconfig-paths的目的是解决这个难题,但我无法使其成功。