Nrwl NX JavaScript lint 堆内存不足

bjw*_*hip 8 node.js angular nrwl-nx

我正在 Nx monorepo 中工作,其中包含许多 Angular 15 应用程序和一些共享库。我使用 nx cli 生成了一个新的 Angular 应用程序,效果很好。我可以毫无问题地提供和构建应用程序。

当我将新应用程序的 tsconfig 文件添加到我的 eslintrc.json 文件时,问题就出现了

"overrides": [
  "parserOptions": {
    "project": [
      "apps/new-app/tsconfig.*?.json"
      "libs/shared/tsconfig.*?.json"
      */ -----
        15 others
      -----/*
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

如果我将新应用程序添加到 parserOptions,然后运行

nx 受影响 --target=lint

对于尚未触及的共享库,我收到此错误

<--- Last few GCs --->

[18664:0000015D230EE780]    71334 ms: Scavenge 4044.3 (4127.2) -> 4039.4 (4128.5) MB, 12.6 / 0.0 ms  (average mu = 0.835, current mu = 0.632) allocation failure 
[18664:0000015D230EE780]    71386 ms: Scavenge 4047.0 (4130.1) -> 4043.9 (4131.8) MB, 14.5 / 0.1 ms  (average mu = 0.835, current mu = 0.632) allocation failure 
[18664:0000015D230EE780]    72392 ms: Scavenge 4048.8 (4131.8) -> 4045.8 (4150.1) MB, 989.7 / 0.0 ms  (average mu = 0.835, current mu = 0.632) allocation failure 


<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
 1: 00007FF7DB8A0B5F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+124015
 2: 00007FF7DB82C916 v8::internal::wasm::WasmCode::safepoint_table_offset+64182
 3: 00007FF7DB82D992 v8::internal::wasm::WasmCode::safepoint_table_offset+68402
 4: 00007FF7DC161D94 v8::Isolate::ReportExternalAllocationLimitReached+116
 5: 00007FF7DC14C35D v8::SharedArrayBuffer::Externalize+781
 6: 00007FF7DBFEF93C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1468
 7: 00007FF7DBFECA54 v8::internal::Heap::CollectGarbage+4244
 8: 00007FF7DBFEA3D0 v8::internal::Heap::AllocateExternalBackingStore+2000
 9: 00007FF7DC00EF56 v8::internal::Factory::NewFillerObject+214
10: 00007FF7DBD416F5 v8::internal::DateCache::Weekday+1797
11: 00007FF7DC1EFA71 v8::internal::SetupIsolateDelegate::SetupHeap+494417
12: 0000015D254F5AEA 
Run Code Online (Sandbox Code Playgroud)

如果我从 parserOptions 中删除新应用程序并运行 lint,则 linter 在除新应用程序之外的所有地方都会成功,错误告诉我将 tsconfig 添加到 parserOptions

我正在使用节点版本 v16.18.1 在 Windows 上运行,并且我尝试以多种方式使用 --max-old-space-size=6144/--max_old_space_size=6144 增加可用内存。

有谁知道是什么导致了这个问题,或者如何解决它?虽然除了 nx lint 之外一切正常,但我的公司使用 nx 内置 lint 命令来验证代码,然后才能推送或合并代码

小智 1

对我来说,解决方法是更改​​我在每个应用程序中指定 tsconfig.json 的方式。本来,我有

\n
"project": ["tsconfig.base.json"]\n
Run Code Online (Sandbox Code Playgroud)\n

将此更改为

\n
"project": ["apps/{{app-name}}/tsconfig.*?.json"]\n
Run Code Online (Sandbox Code Playgroud)\n

似乎解决了包含所有正确文件并且没有内存问题的问题。

\n

很奇怪的问题,我很想听听解释。对我来说,当我迁移到 Nx 16 和 Angular 16\xe2\x80\x94 时,即使运行迁移后,它也会随机弹出。不确定你的情况是否不同。有趣的是,在 CI 机器(Ubuntu 22.04.2,x64)上没有出现 linting 问题,但我的开发机器和另一台机器(macOS 13.4,arm64)都有问题。

\n