pnpm postinstall ngcc 没有按预期运行

And*_*ich 7 angular pnpm

在我们的 ci 管道中,我尝试使用 pnpm 而不是 npm 作为包管理器,但postinstall用于编译 ivy 不兼容库的脚本未按预期运行。

控制台输出显示安装后脚本已执行,但随后该pnpm install过程完成但未执行 ngcc。

devDependencies:
+ @angular-devkit/build-angular 0.1001.7
+ @angular-devkit/build-ng-packagr 0.1001.7
+ @angular/cli 10.1.7
+ @angular/compiler-cli 10.2.1
+ @angular/language-service 10.2.1
+ @ngxs/devtools-plugin 3.7.1
+ @nrwl/cli 10.4.4
+ @nrwl/cypress 10.3.1
+ @nrwl/jest 10.3.1
+ @nrwl/workspace 10.3.1
+ @types/jest 26.0.8
+ @types/leaflet 1.5.19
+ @types/node 14.0.27
+ codelyzer 5.2.2
+ cypress 4.12.1
+ cypress-localstorage-commands 1.3.0
+ dotenv 8.2.0
+ eslint 7.3.1
+ husky 4.3.5
+ jest 26.2.2
+ jest-preset-angular 8.3.1
+ lint-staged 10.5.3
+ ng-packagr 10.1.2
+ prettier 2.0.5
+ ts-jest 26.4.0
+ ts-node 8.10.2
+ tslint 6.1.3
+ typescript 4.0.5

> package@version postinstall /home/...
> ngcc --properties es2015

Run Code Online (Sandbox Code Playgroud)

这就是所发生的一切。有人能帮我吗?

die*_*lar 2

尝试这个:

  1. 更新脚本ngcc中的命令postinstall以包含--loglevel debug.
    这会让您知道 NGCC 正在做什么,即使它没有找到任何可供分析的入口点(这可能会发生,因为 PNPM 以 NGCC 无法使用的方式构造 node_modules);

  2. .npmrc在项目的根目录中创建(或更新)文件以包含以下内容:

    node-linker=hoisted
    
    Run Code Online (Sandbox Code Playgroud)

    这指示 PNPM 使用不带符号链接的平面 node_modules(更多信息)。别担心,PNPM 的速度不仅仅来自于其隔离(符号链接)依赖策略。在我的测试中,提升与隔离在时间上非常相似。

  3. 删除项目的整个 node_modules 目录并使用pnpm install.
    您应该看到 NGCC 的输出(希望)告诉您它找到了入口点并详细说明了它的处理过程。