Это дерево зависимостей. Ваш код загружен ./pack.js
. В процессе загрузки этого файла был загружен модуль jsonwebtoken
. ./pack.js
, затем экспортирует свою собственную функцию generateToken()
, и ваш код может затем вызвать generateToken()
.
Когда выполняется generateToken()
, он использует объект jwt
, который он ранее импортировал, чтобы выполнять свои job.
Единственное, что было успешно вызвано из вашего файла, - это функция generateToken()
, которая была экспортирована из ./pack.js
. Эта функция gererateToken()
затем выполняется в рамках своего собственного модуля, где она имеет доступ к тому, что ей требуется, например, jwt
.
Это аналогично тому, что постоянно происходит в вызовах операционной системы. Вы вызываете функцию операционной системы для воспроизведения аудиофайла. Затем эта функция операционной системы загружает соответствующий звуковой драйвер (если он еще не загружен) и соответствующий код c для распаковки типа звукового файла. Ваш код не должен загружать эти вещи. Вы только что вызвали функцию ОС для воспроизведения звукового файла. Это реализация этой функции внутри ОС, которая загружает все нужные части для фактического выполнения этой функции. То же самое в вашем примере nodejs.