我目前在Angular中遇到了非常奇怪的问题。一周前,我正在我的一个分支机构工作,它很好并且构建正确。但我不知道它在"ng build"期间是如何开始抱怨的,下面是我今天不断收到的错误:
node_modules/@types/babel__traverse/index.d.ts(1136,44): error TS1109: Expression expected.
node_modules/@types/babel__traverse/index.d.ts(1137,21): error TS1109: Expression expected.
node_modules/@types/babel__traverse/index.d.ts(1137,37): error TS1005: ';' expected.
node_modules/@types/babel__traverse/index.d.ts(1137,43): error TS1109: Expression expected.
node_modules/@types/babel__traverse/index.d.ts(1139,1): error TS1128: Declaration or statement expected.
我尝试了以下选项来解决此问题,但没有取得任何成功:
选项 1- 删除和安装node_modules,选项 2- 删除和安装 @types/babel_traverse
谁能让我知道可能是什么原因。这是我的本地角度/依赖安装版本:
Angular CLI: 7.3.10
Node: 8.15.0
OS: win32 x64
Angular: 7.2.15
... animations, common, compiler, compiler-cli, core, elements
... forms, http, language-service, platform-browser
... platform-browser-dynamic, router, service-worker
Package Version
------------------------------------------------------------
@angular-devkit/architect 0.13.10
@angular-devkit/build-angular 0.13.9
@angular-devkit/build-ng-packagr 0.13.9
@angular-devkit/build-optimizer 0.13.9
@angular-devkit/build-webpack 0.13.9
@angular-devkit/core 7.3.10
@angular-devkit/schematics 7.3.10
@angular/cdk 7.3.7
@angular/cli 7.3.10
@angular/material 7.3.7
@angular/material-moment-adapter 7.3.7
@ngtools/json-schema 1.1.0
@ngtools/webpack 7.3.9
@schematics/angular 7.3.10
@schematics/update 0.13.10
ng-packagr 4.7.1
rxjs 6.3.3
typescript 3.2.1
webpack 4.29.0
请注意,我目前无法更新任何内容,因为我的项目已经在生产中。
提前非常感谢。
尝试将 Typescript 更新到较新版本。为我工作。
"打字稿" - "^3.4.2">
我遇到了同样的问题,我找到了绕过该问题的方法,但我必须警告,这是一个补丁而不是修复。解决此问题的方法很简单,只需按照以下步骤下载/安装旧版本的@types/babel__traverse
- 通过运行命令安装旧版本(我使用
7.0.6
npm install @types/babel__traverse@7.0.6
- 注意:您可能希望将其安装在单独的项目或文件夹中,以便运行完整
npm install
不会再次将其覆盖到最新版本。
- 注意:您可能希望将其安装在单独的项目或文件夹中,以便运行完整
- 然后
node_modules@typesbabel__traverse
进入该临时库文件夹,只需复制index.d.ts
文件 - 然后进入损坏的项目并覆盖文件(
node_modules@typesbabel__traverseindex.d.ts
)
瞧,它有效!!
问与答
[问] 那么我们为什么要这样做呢?
[A] 这很简单,与较新的 TypeScript> 3.5.x
相比,比3.5.x
更早的 TypeScript 生成的index.d.ts
文件(其结构不同)完全不同
[Q] 好的,但是为什么我不能将@types/babel__traverse
添加到我的package.json
中并完成它?
[A] 因为 Babel 团队决定使用"@types/babel__traverse": "*"
而那一点*
意味着总是下载最新版本......换句话说,谢谢 Babel 团队我不太高兴(原文如此)报告您通过明确始终使用最新版本:(来破坏我的代码......这是证据,取自我的yarn.lock
文件
"@types/babel__core@^7.1.0":
version "7.1.10"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40"
integrity sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__generator" "*"
"@types/babel__template" "*"
"@types/babel__traverse" "*"
看看最后一行有*
↑
结语
总之,真正的解决方法是将您的 TypeScript 更新到比3.5.x
更新的版本,但如果你不能(像我一样),那么按照我写的 3 个步骤进行操作,您将重新开展业务。
您可以添加
"resolutions": {
"@types/babel__traverse": "7.0.6"
}
到你的package.json
迫使"@types/babel__traverse": "*"
决心"@types/babel__traverse": "7.0.6"
.
方法学:
由于@types/babel__core
依赖项列表包含版本设置为"*
"(也称为最新版本)的@types/babel__traverse
,即使您在package.json
中为@types/babel__traverse
指定了版本,@types/babel__core
也会在其自己的依赖项链中安装最新版本的@types/babel__traverse
。
通过使用resolutions
我们可以为依赖项的依赖项指定严格的限制。
@types/babel__traverse
和@types/babel__core
的不同版本都使用它们支持的 TypeScript 版本进行标记。
分别访问 https://www.npmjs.com/package/@types/babel__traverse?activeTab=versions 和 https://www.npmjs.com/package/@types/babel__core?activeTab=versions,并查看每个版本旁边列出的tsX.Y
标签,以及它支持的 TypeScript 版本。
您需要手动查找这些(我不知道如何自动执行此操作,尽管感觉应该有一种方法),然后在package.json
中手动配置兼容版本,例如
"typescript": "^3.9.10",
"@types/babel__core": "7.1.19",
"@types/babel__traverse": "7.17.1",
为了避免由于依赖项更新而导致的此类错误,并且如果您处于生产环境中,请提交 package-lock.json 或 yarn.lock 文件。
尝试安装最新版本的打字稿。
npm install typescript@latest