如何使用打字稿解决lerna monorepo中的续集和角度冲突?

时间:2019-12-10 14:27:14

标签: node.js angular typescript lerna monorepo

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

Angular使用"typescript": "~3.5.3"

Nodejs具有那些与sequ​​elize一起使用的软件包:

"@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 answer,我需要升级到3.7.3。当我升级时,它在nodejs续集方面运行良好。

但是当我将打字稿更改为3.7.3时,角度不起作用:

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

该如何解决?

1 个答案:

答案 0 :(得分:1)

我可以为您解决此错误,但是您应该分开项目,因为很难维护前端和后端monorepo。这不会是您最后一次依赖冲突。

Angular 8.x卡在TypeScript 3.5上,但是我在网上阅读的所有内容都说它将使用最新的TypeScript 3.7编译,并且据报道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编译