簡體   English   中英

如何使用打字稿解決lerna monorepo中sequelize和angular之間的沖突?

[英]How to solve conflict between sequelize and angular in lerna monorepo with typescript?

我有 lerna 的 monorepo。 在我的項目中,我有 nodejs 和 angular。

Angular 使用"typescript": "~3.5.3"

Nodejs 有這些包可以與 sequelize 一起使用:

"@types/node": "^12.12.16",
"@types/validator": "^12.0.1",
"reflect-metadata": "^0.1.13",
"sequelize": "^5.21.2",
"sequelize-typescript": "^1.1.0"

問題是我有錯誤:

ERROR in [at-loader] ..\..\node_modules\sequelize\types\lib\transaction.d.ts:33:14
    TS1086: An accessor cannot be declared in an ambient context.

根據stackoverflow的回答,我需要升級到3.7.3。 當我升級它在 nodejs sequelize 方面工作正常。

但是當我將打字稿更改為 3.7.3 時,angular 不起作用:

ERROR in The Angular Compiler requires TypeScript >=3.4.0 and <3.6.0 but 3.7.3 was found instead.

我能做些什么來解決這個問題?

我可以為您修復此錯誤,但您應該將您的項目分開,因為維護前端和后端 monorepo 很困難。 這不會是您最后的依賴沖突。

Angular 8.x 停留在 TypeScript 3.5 上,但我在網上閱讀的所有內容都表明它可以與最新的 TypeScript 3.7 一起編譯,據報道,由於 Ivy,Angular 9 也將面向 3.7。

您必須禁用 Angular 編譯器對 TypeScript 版本的強制執行:

tsconfig.json

{
  // ...
  "angularCompilerOptions": {
    // ...
    "disableTypeScriptVersionCheck": true
  }
}

這將使項目編譯,但你會得到一個運行時錯誤,因為 Angular 8 沒有定義默認導入器。 我們可以通過在 polyfills 中添加一個來解決這個問題

polyfills.ts

// @ts-ignore
window.__importDefault = function(mod) {
  return mod && mod.__esModule ? mod : { default: mod };
};

稍后升級到 Angular 9 時。以上可以撤消,它應該使用 TypeScript 3.7 編譯

暫無
暫無

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

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