node.js - chyby sestavení @babel/types při spuštění příkazu ng build v Angular 8.2.14
Při spuštění příkazu 'ng build' pro mou Angular aplikaci dostávám následující chyby.
ERROR in ../node_modules/@types/babel-types/index.d.ts:1769:96 - error TS1144: '{' or ';' expected.
1769 export function assertArrayExpression(node: object | null | undefined, opts?: object): asserts node is ArrayExpression;
~~~~
../node_modules/@types/babel-types/index.d.ts:1769:101 - error TS1005: ';' expected.
1769 export function assertArrayExpression(node: object | null | undefined, opts?: object): asserts node is ArrayExpression;
~~
../node_modules/@types/babel-types/index.d.ts:1769:104 - error TS1005: ';' expected.
1769 export function assertArrayExpression(node: object | null | undefined, opts?: object): asserts node is ArrayExpression;
~~~~~~~~~~~~~~~
../node_modules/@types/babel-types/index.d.ts:1770:101 - error TS1144: '{' or ';' expected.
1770 export function assertAssignmentExpression(node: object | null | undefined, opts?: object): asserts node is AssignmentExpression;
~~~~
../node_modules/@types/babel-types/index.d.ts:1770:106 - error TS1005: ';' expected.
1770 export function assertAssignmentExpression(node: object | null | undefined, opts?: object): asserts node is AssignmentExpression;
Zde jsou mé informace o verzích Angular a Node.js:
Angular CLI: 8.3.29
Node: 16.13.1
OS: win32 x64
Angular: 8.2.14
npm 8.1.2
Dříve jsem používal Node 12 a stavělo se to úspěšně. Po upgradu na Node 16 se setkávám s výše uvedenými problémy.
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.25",
"@angular/cli": "~8.3.25",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3",
"@types/node": "12.7.3",
"apply-loader": "^2.0.0",
"codelyzer": "^5.0.1",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "^4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~1.1.2",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.4.0",
"pug": "^2.0.3",
"pug-loader": "^2.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.11.0",
"typescript": "~3.5.3"
}
Potřebuji aktualizovat nějaké verze balíčků? Nebo existují nějaké problémy s kompatibilitou s Node 16?
Odpověď č. 1
Problém je v tom, že Angular v8 má stovky závislostí a poměrně dost z nich není kompatibilních s Node v16 (ani s package-lock.json v2). Pokud potřebujete upgradovat Node, možná by bylo lepší také upgradovat Angular.
Nejlepší/nejjednodušší je postupně aktualizovat vaše závislosti při postupném upgradu node. Nejprve nainstalujte node 14, aktualizujte závislosti, potom nainstalujte verzi 16 a zopakujte to.
Také vám doporučuji snížit verzi npm na v7, protože v8+ aktualizuje váš soubor package-lock.json na v2. To může při provádění aktualizací věci zkomplikovat. Po aktualizaci vašich závislostí můžete vždy aktualizovat npm na nejnovější verzi a poté aktualizovat package-lock na v2.
Odpověděl jsem na podobnou otázku nedávno, možná ti to také pomůže: https://stackoverflow.com/a/68159069/4604645