📜  @angular compiler-cli ngcc __ngcc_lock_file__.) (1)

📅  最后修改于: 2023-12-03 14:59:07.706000             🧑  作者: Mango

介绍

在 Angular 编译过程中,使用 @angular/compiler-cli 作为编译工具,其中一个很重要的步骤是进行运行时的 JIT(即时编译)转换,这个步骤需要使用 ngcc(Angular 对 JIT 编译时的静态代码分析工具)进行处理。为了确保多个进程之间不会互相干扰,ngcc 会创建一个名为 __ngcc_lock_file__ 的锁文件在执行期间以确保同一时间只有一个进程在运行 ngcc

如何使用

@angular/compiler-cli 包中自带了 ngcc 命令行工具,可以直接使用如下命令运行:

npx ngcc

在执行此命令之前,确保安装了 @angular/compiler-cli 包。当执行此命令时,ngcc 将扫描当前目录以及其所有子目录,分析所有的节点包中的 ngfactory 文件,并将其转换为 JIT 可用的代码。转换完成后,ngcc 会在每个节点包中添加一个 .ngcc 目录,其中包含转换后的 ngfactory 文件。

在多进程同时执行 ngcc 时会出现锁文件冲突的情况。为了避免这种冲突,每个进程执行时都会先检查锁文件是否存在,如果存在,则进程会等待一段时间后再次尝试获取锁,直到获取到为止。

锁文件位置

ngcc 的锁文件存储位置在目录结构中,文件名为 __ngcc_lock_file__,它会放置在一个特定的目录下。一般情况下,锁文件会在执行时自动创建在 Node.js 运行时环境下的 $TMPDIR 目录下。如果需要自定义锁文件存放位置,可以通过环境变量 NGCC_LOCK_FILE 来指定,例如:

export NGCC_LOCK_FILE=/path/to/ngcc.lock
总结

ngcc 是 Angular 编译工具中的一个重要组成部分,用于实现 JIT 编译时的静态代码分析和转换。在多进程同时执行 ngcc 时需要使用锁文件来避免冲突,锁文件存储位置默认为 Node.js 环境下的 $TMPDIR 目录,也可以通过环境变量自定义。