Я пытаюсь использовать async_hooks
для отслеживания идентификаторов запросов, и мне нужно связать его с существующим источником, используя browserify
, и у меня возникает следующая проблема:
browserify -d test.js > out.js
at <workspace>/.nvm/versions/node/v10.15.3/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:46:17
at process (<workspace>/.nvm/versions/node/v10.15.3/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:173:43)
at ondir (<workspace>/.nvm/versions/node/v10.15.3/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:188:17)
at load (<workspace>/.nvm/versions/node/v10.15.3/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
at onex (<workspace>/.nvm/versions/node/v10.15.3/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
at <workspace>/.nvm/versions/node/v10.15.3/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
at FSReqWrap.oncomplete (fs.js:153:21)
Я создал тривиальный PO C, чтобы проиллюстрировать то, что я пытаюсь достичь. У меня есть файл context.js
, как показано ниже:
const async_hooks = require('async_hooks');
const contexts = {};
async_hooks.createHook({
initCtx: (asyncId, type, triggerAsyncId) => {
if (contexts[triggerAsyncId]) {
contexts[asyncId] = contexts[triggerAsyncId];
}
},
destroy: (asyncId) => {
delete contexts[asyncId];
},
}).enable();
function initCtx(ctx, fn) {
const asyncResource = new async_hooks.AsyncResource('REQUEST_CONTEXT');
return asyncResource.runInAsyncScope(() => {
const asyncId = async_hooks.executionAsyncId();
contexts[asyncId] = {...ctx}
console.log(contexts[asyncId])
return fn();
});
}
function getCtx() {
const asyncId = async_hooks.executionAsyncId();
return contexts[asyncId] || {};
};
module.exports = {
initCtx,
getCtx,
};
И тестовый файл, test. js:
const {initCtx, getCtx} = require('./context.js');
const logId = () => {
const context = getCtx();
console.log(`My context id is:`, context);
}
var ctx = {requestId:1};
initCtx(ctx, logId);
Соответствующие версии:
node --version
v10.15.3
npm --version
6.4.1
Запуск node test.js
работает нормально:
{ ctx: { requestId: 1 } }
{ ctx: { requestId: 1 } }
My context id is: { ctx: { requestId: 1 } }
Это приложение browserify
, которое вызывает проблему. Есть ли конкретная c конфигурация для browserify
, которая мне нужна, или она вообще поддерживается?