是否可以检测到何时解决了所有“静态”依赖关系?

时间:2019-03-19 08:53:19

标签: node.js

// a.js
require('express');
require('./b');

// b.js
require('./c');
require('mocha');

// c.js
// I would like to detect here when all "static" dependencies were resolved (express, mocha, b)
  • 假设没有“动态”进口
  • 假设没有循环依赖项

所有静态依赖关系都解决时,是否有全局事件?还是任何其他方式(异步)触发此类事件?


编辑:

似乎我可以通过以下代码来实现:

process.nextTick(() => {
  console.log(Object.keys(require.cache));
});

上面的代码应在所有“静态”要求都已解决/加载后执行。当然,如果事件循环很忙(例如无限循环),则此代码将永远不会执行。据我测试,它似乎有效。

1 个答案:

答案 0 :(得分:0)

在这种情况下没有这种全局错误处理程序。但是,请立即尝试使用此解决方案,

process.on('uncaughtException', function (error) {
    if (error.code === 'MODULE_NOT_FOUND') {
        console.log('Module not found error');
        // MODULE IS NOT RESOLVED
    }
});

在加载模块之前订阅此事件。如果模块未解析,则节点将引发Cannot find module错误,相关部分(在if语句内部)将执行。


编辑

在nodejs中,模块可以在运行时中的任何时间加载,因此在解决所有模块时不可能(或不实际)调用处理程序。

相反,您可以将模块导入try,catch块中(如果可能)。