Pourquoi require ("perf_hooks") échoue?
Dans ma compréhension, "perf_hooks" fait partie de Node.js. Cependant, lorsque le test avec npm testcela échoue pour moi avec ce qui suit (certains noms de fichiers sont modifiés):
Error: ENOENT: no such file or directory, open 'perf_hooks'
at Object.openSync (fs.js:465:3)
at Object.readFileSync (fs.js:368:35)
at SandboxedModule._getCompileInfo (node_modules/sandboxed-module/lib/sandboxed_module.js:265:20)
at SandboxedModule._compile (node_modules/sandboxed-module/lib/sandboxed_module.js:245:22)
at createInnerSandboxedModule (node_modules/sandboxed-module/lib/sandboxed_module.js:183:23)
at SandboxedModule.RecursiveRequireProxy (node_modules/sandboxed-module/lib/sandboxed_module.js:214:27)
at /Users/asmirnov/Documents/blabla2.js:51:12
at Object.<anonymous> (lib/profiler.js:53:3)
at SandboxedModule._compile (node_modules/sandboxed-module/lib/sandboxed_module.js:251:19)
at createInnerSandboxedModule (node_modules/sandboxed-module/lib/sandboxed_module.js:183:23)
at SandboxedModule.RecursiveRequireProxy (node_modules/sandboxed-module/lib/sandboxed_module.js:214:27)
at Object.<anonymous> (lib/blabla1.js:29:20)
at SandboxedModule._compile (node_modules/sandboxed-module/lib/sandboxed_module.js:251:19)
at createInnerSandboxedModule (node_modules/sandboxed-module/lib/sandboxed_module.js:183:23)
at SandboxedModule.RecursiveRequireProxy (node_modules/sandboxed-module/lib/sandboxed_module.js:214:27)
at SandboxedModule.requireInterceptor (node_modules/sandboxed-module/lib/sandboxed_module.js:227:9)
at Context.<anonymous> (test/blabla1.js:73:22)
at processImmediate (internal/timers.js:458:21)
C'est une partie du fichier ( lib/profiler.js) qui l'utilise:
const {performance, PerformanceObserver} = (function()
{
try
{
if (window && typeof window.performance == "undefined")
throw new TypeError();
return window;
}
catch (e)
{
return require("perf_hooks");
}
})();
Quelle peut être une raison? Cependant, dans certains scénarios ( npm run ..), cela fonctionne comme prévu. Toutes les suggestions sont appréciées.
PS. Node est relativement récent:
> node --version
v14.8.0
Réponses
C'est un problème "sandboxed-module" 2.0.3 qui a été corrigé dans 2.0.4.
perf_hooksest en effet dans cette version de Node.js. Dans 14.8.0, require()lance MODULE_NOT_FOUND(et non ENOENT) quand il ne peut pas trouver un module, donc le problème est autre chose.
Si c'est définitivement la require()ligne qui jette, alors il semble probable qu'elle require()ait été patchée par un singe. S'ils ont été corrigés require()mais pas module.require(), vous pouvez essayer de passer require()à module.require()in lib/profiler.js.
EDIT: Comme le suggère OP, sandboxed-moduleest probablement un coupable car il gâche le chargement du module. Ils rapportent qu'il est corrigé dans 2.0.4, mais sur la base des informations du référentiel sur le correctif , il semblerait que ce soit corrigé dans 2.0.1. Dans tous les cas, la mise à jour vers la version 2.0.4 (ou une version ultérieure, mais c'est la dernière à ce jour) est 👍.