我有一个客户端/服务器应用程序,其中客户端是一个有角度的应用程序。服务器确实为其提供的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
或者,或者手动创建示例:
export enum ApiSample { X = "X" }
的文件“ api.ts” {"paths":{"api":["/path/to/server/api"]}
添加到compilerOptions
ApiSample.X
npm start
"importHelpers": true
。这就是为什么它以前起作用而现在不再起作用。在tsconfig.json中指定"importHelpers": false
可以解决此问题,但是当然存在此选项是有原因的,因此这不是最终解决方案"tslib": ["node_modules/tslib"]
可解决此问题。这可能是最终的解决方案,尽管了解确切发生的情况以及在何处记录下来会很有趣。答案 0 :(得分:1)
因此对于Angular 8和Angular 9,似乎在tsconfig.json中将"tslib": ["node_modules/tslib"]
添加到compilerOptions/paths
确实可以解决问题。
在Angular 10中,问题完全消失了,不再需要任何解决方法。