角度:node_modules/@types/babel _traverse/index.d.ts(1137,43):错误 TS1109:预期的表达

tut*_*eed 9 build angular-cli

我目前在 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.
Run Code Online (Sandbox Code Playgroud)

我尝试了以下选项来解决此问题,但没有取得任何成功:

选项 1 - 删除和安装 node_modules, 选项 2 - 删除和安装 @types/babel_traverse

任何人都可以让我知道可能是什么原因。这是我的本地 angular/dependancy 安装版本:

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
Run Code Online (Sandbox Code Playgroud)

请注意,此时我无法更新任何内容,因为我的项目已经在生产中。

提前谢谢了。

Gif*_* N. 8

你可以加

"resolutions": {
    "@types/babel__traverse": "7.0.6"
}
Run Code Online (Sandbox Code Playgroud)

给你package.json去强制"@types/babel__traverse": "*"去决心"@types/babel__traverse": "7.0.6"

方法论:

因为@types/babel__core依赖项列表包含@types/babel__traverse版本设置为“ ”(又名最新)的版本,即使您为in*指定版本,也会在其自己的依赖项链中安装最新版本。@types/babel__traversepackage.json@types/babel__core@types/babel__traverse

通过使用resolutions我们可以对依赖项的依赖项指定严格的限制。


小智 7

尝试将 Typescript 更新到较新的版本。为我工作。

“打字稿”-“^3.4.2”


Mik*_*ton 6

@types/babel__traverse和的不同版本@types/babel__core都标有它们支持的 TypeScript 版本。

分别访问https://www.npmjs.com/package/@types/babel__traverse?activeTab=versionshttps://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",
Run Code Online (Sandbox Code Playgroud)


ghi*_*ing 5

我遇到了同样的问题,我找到了一种绕过问题的方法,但我必须警告,这是一个补丁而不是修复。解决这个问题的方法很简单,只需@types/babel__traverse按照以下步骤下载/安装旧版本

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

瞧它有效!!!

问答

[Q] 那我们为什么要这样做呢?

[A] 很简单,index.d.ts旧的 TypeScript 生成的文件3.5.x与新的 TypeScript相比有很大不同(其结构不同)> 3.5.x

[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" "*"
Run Code Online (Sandbox Code Playgroud)

看看最后一行*?

最后一句话

总之,真正的解决方法是将您的 TypeScript 更新到比3.5.x但如果您不能(像我一样)更新的版本,那么请按照我写的 3 个步骤进行操作,您将重新开始工作。


小智 0

为了避免由于依赖项更新而导致此类错误,并且如果您在生产环境中,请提交 package-lock.json 或 YARN.LOCK 文件。