@@ -270,7 +270,7 @@ changes:
270
270
Register a module that exports [hooks][] that customize Node.js module
271
271
resolution and loading behavior. See [Customization hooks][].
272
272
273
- ## ` module.stripTypeScriptTypes(code[, options])`
273
+ ### ` module.stripTypeScriptTypes(code[, options])`
274
274
275
275
<!-- YAML
276
276
added: REPLACEME
@@ -408,6 +408,175 @@ import('node:fs').then((esmFS) => {
408
408
});
409
409
` ` `
410
410
411
+ ## Module compile cache
412
+
413
+ <!-- YAML
414
+ added: v22.1.0
415
+ changes:
416
+ - version: v22.8.0
417
+ pr-url: https://github.com/nodejs/node/pull/54501
418
+ description: add initial JavaScript APIs for runtime access.
419
+ -->
420
+
421
+ The module compile cache can be enabled either using the [` module .enableCompileCache ()` ][]
422
+ method or the [` NODE_COMPILE_CACHE = dir` ][] environment variable. After it is enabled,
423
+ whenever Node.js compiles a CommonJS or a ECMAScript Module, it will use on-disk
424
+ [V8 code cache][] persisted in the specified directory to speed up the compilation.
425
+ This may slow down the first load of a module graph, but subsequent loads of the same module
426
+ graph may get a significant speedup if the contents of the modules do not change.
427
+
428
+ To clean up the generated compile cache on disk, simply remove the cache directory. The cache
429
+ directory will be recreated the next time the same directory is used for for compile cache
430
+ storage. To avoid filling up the disk with stale cache, it is recommended to use a directory
431
+ under the [` os .tmpdir ()` ][]. If the compile cache is enabled by a call to
432
+ [` module .enableCompileCache ()` ][] without specifying the directory, Node.js will use
433
+ the [` NODE_COMPILE_CACHE = dir` ][] environment variable if it's set, or defaults
434
+ to ` path .join (os .tmpdir (), ' node-compile-cache' )` otherwise. To locate the compile cache
435
+ directory used by a running Node.js instance, use [` module .getCompileCacheDir ()` ][].
436
+
437
+ Currently when using the compile cache with [V8 JavaScript code coverage][], the
438
+ coverage being collected by V8 may be less precise in functions that are
439
+ deserialized from the code cache. It's recommended to turn this off when
440
+ running tests to generate precise coverage.
441
+
442
+ The enabled module compile cache can be disabled by the [` NODE_DISABLE_COMPILE_CACHE = 1 ` ][]
443
+ environment variable. This can be useful when the compile cache leads to unexpected or
444
+ undesired behaviors (e.g. less precise test coverage).
445
+
446
+ Compilation cache generated by one version of Node.js can not be reused by a different
447
+ version of Node.js. Cache generated by different versions of Node.js will be stored
448
+ separately if the same base directory is used to persist the cache, so they can co-exist.
449
+
450
+ At the moment, when the compile cache is enabled and a module is loaded afresh, the
451
+ code cache is generated from the compiled code immediately, but will only be written
452
+ to disk when the Node.js instance is about to exit. This is subject to change. The
453
+ [` module .flushCompileCache ()` ][] method can be used to ensure the accumulated code cache
454
+ is flushed to disk in case the application wants to spawn other Node.js instances
455
+ and let them share the cache long before the parent exits.
456
+
457
+ ### ` module .constants .compileCacheStatus `
458
+
459
+ <!-- YAML
460
+ added: v22.8.0
461
+ -->
462
+
463
+ > Stability: 1.1 - Active Development
464
+
465
+ The following constants are returned as the ` status` field in the object returned by
466
+ [` module .enableCompileCache ()` ][] to indicate the result of the attempt to enable the
467
+ [module compile cache][].
468
+
469
+ <table>
470
+ <tr>
471
+ <th>Constant</th>
472
+ <th>Description</th>
473
+ </tr>
474
+ <tr>
475
+ <td><code>ENABLED</code></td>
476
+ <td>
477
+ Node.js has enabled the compile cache successfully. The directory used to store the
478
+ compile cache will be returned in the <code>directory</code> field in the
479
+ returned object.
480
+ </td>
481
+ </tr>
482
+ <tr>
483
+ <td><code>ALREADY_ENABLED</code></td>
484
+ <td>
485
+ The compile cache has already been enabled before, either by a previous call to
486
+ <code>module.enableCompileCache()</code>, or by the <code>NODE_COMPILE_CACHE=dir</code>
487
+ environment variable. The directory used to store the
488
+ compile cache will be returned in the <code>directory</code> field in the
489
+ returned object.
490
+ </td>
491
+ </tr>
492
+ <tr>
493
+ <td><code>FAILED</code></td>
494
+ <td>
495
+ Node.js fails to enable the compile cache. This can be caused by the lack of
496
+ permission to use the specified directory, or various kinds of file system errors.
497
+ The detail of the failure will be returned in the <code>message</code> field in the
498
+ returned object.
499
+ </td>
500
+ </tr>
501
+ <tr>
502
+ <td><code>DISABLED</code></td>
503
+ <td>
504
+ Node.js cannot enable the compile cache because the environment variable
505
+ <code>NODE_DISABLE_COMPILE_CACHE=1</code> has been set.
506
+ </td>
507
+ </tr>
508
+ </table>
509
+
510
+ ### ` module .enableCompileCache ([cacheDir])`
511
+
512
+ <!-- YAML
513
+ added: v22.8.0
514
+ -->
515
+
516
+ > Stability: 1.1 - Active Development
517
+
518
+ * ` cacheDir` {string|undefined} Optional path to specify the directory where the compile cache
519
+ will be stored/retrieved.
520
+ * Returns: {Object}
521
+ * ` status` {integer} One of the [` module .constants .compileCacheStatus ` ][]
522
+ * ` message` {string|undefined} If Node.js cannot enable the compile cache, this contains
523
+ the error message. Only set if ` status` is ` module .constants .compileCacheStatus .FAILED ` .
524
+ * ` directory` {string|undefined} If the compile cache is enabled, this contains the directory
525
+ where the compile cache is stored. Only set if ` status` is
526
+ ` module .constants .compileCacheStatus .ENABLED ` or
527
+ ` module .constants .compileCacheStatus .ALREADY_ENABLED ` .
528
+
529
+ Enable [module compile cache][] in the current Node.js instance.
530
+
531
+ If ` cacheDir` is not specified, Node.js will either use the directory specified by the
532
+ [` NODE_COMPILE_CACHE = dir` ][] environment variable if it's set, or use
533
+ ` path .join (os .tmpdir (), ' node-compile-cache' )` otherwise. For general use cases, it's
534
+ recommended to call ` module .enableCompileCache ()` without specifying the ` cacheDir` ,
535
+ so that the directory can be overridden by the ` NODE_COMPILE_CACHE ` environment
536
+ variable when necessary.
537
+
538
+ Since compile cache is supposed to be a quiet optimization that is not required for the
539
+ application to be functional, this method is designed to not throw any exception when the
540
+ compile cache cannot be enabled. Instead, it will return an object containing an error
541
+ message in the ` message` field to aid debugging.
542
+ If compile cache is enabled successfully, the ` directory` field in the returned object
543
+ contains the path to the directory where the compile cache is stored. The ` status`
544
+ field in the returned object would be one of the ` module .constants .compileCacheStatus `
545
+ values to indicate the result of the attempt to enable the [module compile cache][].
546
+
547
+ This method only affects the current Node.js instance. To enable it in child worker threads,
548
+ either call this method in child worker threads too, or set the
549
+ ` process .env .NODE_COMPILE_CACHE ` value to compile cache directory so the behavior can
550
+ be inherited into the child workers. The directory can be obtained either from the
551
+ ` directory` field returned by this method, or with [` module .getCompileCacheDir ()` ][].
552
+
553
+ ### ` module .flushCompileCache ()`
554
+
555
+ <!-- YAML
556
+ added:
557
+ - v23.0.0
558
+ - v22.10.0
559
+ -->
560
+
561
+ > Stability: 1.1 - Active Development
562
+
563
+ Flush the [module compile cache][] accumulated from modules already loaded
564
+ in the current Node.js instance to disk. This returns after all the flushing
565
+ file system operations come to an end, no matter they succeed or not. If there
566
+ are any errors, this will fail silently, since compile cache misses should not
567
+ interfere with the actual operation of the application.
568
+
569
+ ### ` module .getCompileCacheDir ()`
570
+
571
+ <!-- YAML
572
+ added: v22.8.0
573
+ -->
574
+
575
+ > Stability: 1.1 - Active Development
576
+
577
+ * Returns: {string|undefined} Path to the [module compile cache][] directory if it is enabled,
578
+ or ` undefined ` otherwise.
579
+
411
580
<i id="module_customization_hooks"></i>
412
581
413
582
## Customization Hooks
@@ -1204,21 +1373,6 @@ added:
1204
1373
` path` is the resolved path for the file for which a corresponding source map
1205
1374
should be fetched.
1206
1375
1207
- ### ` module .flushCompileCache ()`
1208
-
1209
- <!-- YAML
1210
- added:
1211
- - v22.10.0
1212
- -->
1213
-
1214
- > Stability: 1.1 - Active Development
1215
-
1216
- Flush the [module compile cache][] accumulated from modules already loaded
1217
- in the current Node.js instance to disk. This returns after all the flushing
1218
- file system operations come to an end, no matter they succeed or not. If there
1219
- are any errors, this will fail silently, since compile cache misses should not
1220
- interfer with the actual operation of the application.
1221
-
1222
1376
### Class: ` module .SourceMap `
1223
1377
1224
1378
<!-- YAML
0 commit comments