角度:node_modules/@types/babel _traverse/index.d.ts(1137,43):错



我目前在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

  1. 通过运行命令安装旧版本(我使用7.0.6npm install @types/babel__traverse@7.0.6
    • 注意:您可能希望将其安装在单独的项目或文件夹中,以便运行完整npm install不会再次将其覆盖到最新版本。
  2. 然后node_modules@typesbabel__traverse进入该临时库文件夹,只需复制index.d.ts文件
  3. 然后进入损坏的项目并覆盖文件(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