簡體   English   中英

引用外部 typescript 文件時如何避免“找不到模塊:錯誤:無法解析 'tslib'”-錯誤?

[英]How to avoid “Module not found: Error: Can't resolve 'tslib'”-error when referencing an external typescript file?

問題

我有一個客戶端/服務器應用程序,其中客戶端是一個角度應用程序。 服務器確實為它提供的 API 提供了幾個打字稿定義。 這些定義是從項目外部文件夾加載的。 到目前為止,這工作正常,但是現在我正在從 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. 新建angular工程
  2. 在文件系統的某處創建一個文件“api.ts”,其內容為export enum ApiSample { X = "X" }
  3. 在 "tsconfig.json" 中添加{"paths":{"api":["/path/to/server/api"]}compilerOptions
  4. 從 angular 項目的任何文件訪問ApiSample.X
  5. 運行npm start

迄今為止的發現

  • 遷移器在 tsconfig.json 中添加了"importHelpers": true 這就是為什么它以前有效而現在不再有效的原因。 在 tsconfig.json 中指定"importHelpers": false解決了這個問題,但是這個選項當然是有原因的,所以這不是最終的解決方案
  • 明確指定"tslib": ["node_modules/tslib"]解決了這個問題。 這可能是最終的解決方案,盡管了解到底發生了什么以及記錄在哪里會很有趣。

Angular 8&9

因此,對於 Angular 8 和 9,似乎將"tslib": ["node_modules/tslib"]添加到 tsconfig.json 中的compilerOptions/paths確實可以解決問題。

Angular 10

在 Angular 10 中,問題完全消失了,不再需要解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM