module: CJS loader re-stats the same missing paths within one require tree
Đang mở
@maxday đang làm issue này rồi.
Từ ngày 22/7/2026.
module
- Ngôn ngữ chính
- JavaScript
- Star
- 122k
- Fork
- 37.3k
- Merge trung bình
- 4 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 283
Mô tả
The CommonJS loader keeps a per-require-tree statCache (in lib/internal/modules/cjs/loader.js) to avoid re-stat-ing the same path while resolving a module tree. Today it only caches successful stats. Negative results (e.g. -ENOENT) fall through the cache and are re-probed every time the same missing path is looked up again within the same top-level require.
// lib/internal/modules/cjs/loader.js — stat()
const result = internalFsBinding.internalModuleStat(filename);
if (statCache !== null && result >= 0) {
// Only set cache when `internalModuleStat(filename)` succeeds.
statCache.set(filename, result);
}
Failed probes are extremely common during resolution, and the same misses recur across sibling and descendant modules:
tryExtensionsresolves an extensionless specifier (e.g.require('./helper')) bystat-ing each candidate in order:./helper.js, then./helper.json, then./helper.nodeuntil one exists. Every extension tried before the real one is a miss.- Bare specifiers (
require('foo')) walk thenode_moduleschain upward:…/a/b/node_modules,…/a/node_modules,…/node_modules. Most of those parent directories don't exist, so each is a negative stat, and every bare require in the tree re-walks the same non-existent ancestors.
Because negatives aren't cached, these misses are re-stat-ed repeatedly within a single resolution pass.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Đánh giá
Issue này chưa được đánh giá.