Что требует в Node.js - PullRequest
0 голосов
/ 20 июня 2020

Мне было интересно, как может экспортированная функция, в которой используются npm модули, запускаться в другом файле, который не требует этих npm пакетов?

Первый файл (который будет экспортирован):

    const jwt = require("jsonwebtoken")
    var generateToken = function (){var token = jwt.sign({name:"medo"},"sas");return token}

    module.exports = generateToken

Второй файл (для которого потребуется функция):

    const token = require("./pack.js")
    console.log(token());

Как функция успешно работает во втором файле, когда модуль jsonwebtoken в нем не требуется ?

1 Ответ

0 голосов
/ 20 июня 2020

Это дерево зависимостей. Ваш код загружен ./pack.js. В процессе загрузки этого файла был загружен модуль jsonwebtoken. ./pack.js, затем экспортирует свою собственную функцию generateToken(), и ваш код может затем вызвать generateToken().

Когда выполняется generateToken(), он использует объект jwt, который он ранее импортировал, чтобы выполнять свои job.

Единственное, что было успешно вызвано из вашего файла, - это функция generateToken(), которая была экспортирована из ./pack.js. Эта функция gererateToken() затем выполняется в рамках своего собственного модуля, где она имеет доступ к тому, что ей требуется, например, jwt.

Это аналогично тому, что постоянно происходит в вызовах операционной системы. Вы вызываете функцию операционной системы для воспроизведения аудиофайла. Затем эта функция операционной системы загружает соответствующий звуковой драйвер (если он еще не загружен) и соответствующий код c для распаковки типа звукового файла. Ваш код не должен загружать эти вещи. Вы только что вызвали функцию ОС для воспроизведения звукового файла. Это реализация этой функции внутри ОС, которая загружает все нужные части для фактического выполнения этой функции. То же самое в вашем примере nodejs.

...