引用外部打字稿文件时,如何避免出现“找不到模块:错误:无法解析'tslib'”错误?

时间:2019-10-06 17:25:49

标签: angular typescript angular-cli

问题

我有一个客户端/服务器应用程序,其中客户端是一个有角度的应用程序。服务器确实为其提供的API提供了两个typescript定义。这些定义是从项目外部文件夹加载的。到目前为止,这工作正常,但是现在我从Angular 7升级到Angular 8(并同时还将Typescript从3.1版升级到3.5),并且当尝试从定义中使用非静态枚举时,现在会产生此错误:

  

找不到模块:错误:无法解析'/ path / to / server / definitions'中的'tslib'

api.ts文件位于客户端目录中时,一切正常。

为什么会这样,我该怎么办?

创建一个最小的可复制示例

下面是一个快速脚本,用于创建一个最小的示例以重现:

mkdir project
cd project
ng new client --minimal=true --skipGit=true --routing=false --style=css
mkdir server
echo 'export enum ApiSample { X = "X" }' > server/api.ts
sed -i 's/"compilerOptions": {/"compilerOptions": {"paths":{"api":["..\/server\/api"]},/' client/tsconfig.json
sed -i -e "1iimport { ApiSample } from 'api';" -e "s/title = 'client';/title = 'client' + ApiSample.X;/" client/src/app/app.component.ts
cd client
npm start

或者,或者手动创建示例:

  1. 创建一个新的角度项目
  2. 在文件系统中的某处创建内容为export enum ApiSample { X = "X" }的文件“ api.ts”
  3. 在“ tsconfig.json”中,将{"paths":{"api":["/path/to/server/api"]}添加到compilerOptions
  4. 从角度项目的任何文件访问ApiSample.X
  5. 运行npm start

到目前为止的发现

  • 该迁移者在tsconfig.json中添加了"importHelpers": true。这就是为什么它以前起作用而现在不再起作用。在tsconfig.json中指定"importHelpers": false可以解决此问题,但是当然存在此选项是有原因的,因此这不是最终解决方案
  • 明确指定"tslib": ["node_modules/tslib"]可解决此问题。这可能是最终的解决方案,尽管了解确切发生的情况以及在何处记录下来会很有趣。

1 个答案:

答案 0 :(得分:1)

Angular 8&9

因此对于Angular 8和Angular 9,似乎在tsconfig.json中将"tslib": ["node_modules/tslib"]添加到compilerOptions/paths确实可以解决问题。

角度10

在Angular 10中,问题完全消失了,不再需要任何解决方法。