Поддержка Browserify для async_hooks? - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь использовать 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, которая мне нужна, или она вообще поддерживается?

...