如何正确处理打字稿路径以分隔库代码和服务器?

时间:2018-07-02 06:31:14

标签: typescript npm

我正在尝试构建一个基于打字稿的项目,该项目应该提供一个库来定义供系统其他组件使用的服务。为了轻松测试这些服务,我想提供一个简单的服务器,用一个类似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的目的是解决这个难题,但我无法使其成功。

0 个答案:

没有答案