如何用打字稿解决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.
根据 我需要升级到 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 上,但我在网上阅读的所有内容都说它将 okay 使用最新的 TypeScript 3.7 编译,并且Angular据报道,由于 Ivy,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编译
我有 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.
根据
但是当我将打字稿更改为 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 上,但我在网上阅读的所有内容都说它将 okay 使用最新的 TypeScript 3.7 编译,并且Angular据报道,由于 Ivy,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编译