0

我遇到了tsc编译在 Buildkite 构建管道中无限期挂起的问题。

我找不到任何详细的选项tsc,所以我所拥有的最好的是--traceResolution.

在我的本地机器上,输出的最后几行是:

======== Type reference directive 'jest' was successfully resolved to '/Users/djohnston/git/myproject/node_modules/@types/jest/index.d.ts' with Package ID '@types/jest/index.d.ts@26.0.20', primary: true. ========
✨  Done in 6.35s.

在构建管道上,最后的命令是:

[2021-03-12T00:59:08Z] ======== Type reference directive 'jest' was successfully resolved to '/app/node_modules/@types/jest/index.d.ts' with Package ID '@types/jest/index.d.ts@26.0.20', primary: true. ========

因此,决议似乎完全完成。

还有什么可能导致 TypeScript 挂在这里?这可能是这个问题可能暗示的记忆问题吗?

我可以添加一些进一步的命令/标志来帮助调试吗?

内存调查

构建代理是一个 AWS EC2 t2.large 实例 - 具有 8GB RAM。

我已将管道命令更新为:

top -bn1 &&  yarn test 

其中测试是:

tsc --version && tsc --diagnostics && tsc  --traceResolution

我得到:

[2021-03-12T01:51:50Z] Mem: 3348592K used, 4818096K free, 504K shrd, 1576K buff, 2005316K cached
[2021-03-12T01:51:50Z] CPU:   0% usr   0% sys   0% nic 100% idle   0% io   0% irq   0% sirq
[2021-03-12T01:51:50Z] Load average: 1.49 0.47 0.17 2/280 279
[2021-03-12T01:51:50Z]   PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
[2021-03-12T01:51:50Z]   279     6 root     R     1580   0%   0   0% top -bn1
[2021-03-12T01:51:50Z]     6     1 root     S     1580   0%   1   0% /bin/sh -e -c .buildkite/scripts/prepare_npmrc.sh && yarn install && yarn bootstrap && yarn format:check && yarn lint && top -bn1 &&  yarn test && yarn build
[2021-03-12T01:51:50Z]     1     0 root     S     1052   0%   1   0% /sbin/docker-init -- docker-entrypoint.sh /bin/sh -e -c .buildkite/scripts/prepare_npmrc.sh && yarn install && yarn bootstrap && yarn format:check && yarn lint && top -bn1 &&  yarn test && yarn build

所以这似乎证实了我们确实有 8GB,尽管只有 4.8GB 可用。

对于第二部分:

[2021-03-12T01:54:23Z] $ tsc --version && tsc --diagnostics && tsc  --traceResolution
[2021-03-12T01:54:23Z] Version 4.2.3
[2021-03-12T01:54:23Z] Files:             1199
[2021-03-12T01:54:23Z] Lines:           194583
[2021-03-12T01:54:23Z] Nodes:           504127
[2021-03-12T01:54:23Z] Identifiers:     163089
[2021-03-12T01:54:23Z] Symbols:         201735
[2021-03-12T01:54:23Z] Types:            37565
[2021-03-12T01:54:23Z] Instantiations:  691770
[2021-03-12T01:54:23Z] Memory used:    256799K
[2021-03-12T01:54:23Z] I/O read:         0.13s
[2021-03-12T01:54:23Z] I/O write:        0.00s
[2021-03-12T01:54:23Z] Parse time:       5.04s
[2021-03-12T01:54:23Z] Bind time:        2.01s
[2021-03-12T01:54:23Z] Check time:       8.02s
[2021-03-12T01:54:23Z] Emit time:        0.00s
[2021-03-12T01:54:23Z] Total time:      15.07s

看起来只需要 250MB - 所以我看不出这是一个内存问题。

有什么建议么?

更新 - 看起来它与 lerna/monorepos 有关。

这个项目的结构其实是这样的:

/
 package.json 
    test: "lerna run test"
    build: "lerna run build"
 packages/
   package-a 
      test: "tsc && jest" <- is failing here
   package-b
      test: "..." 
      build: "..."

所以在我运行“yarn test”的 pipeline.yml 中,它实际上正在运行“lerna run test”,它将运行那个单独的命令。

如果我将其更改为“cd packages/package-a && yarn test”,则它通过了。

这可能与这个打字稿问题有关,他们提到 docker workdir 目录可能是问题所在。

4

0 回答 0