В каком формате находится каждый модуль в в Node.js ?

#javascript #node.js #oop #object

#javascript #node.js #ооп #объект

Вопрос:

В Node.js каждый модуль находится в объектном формате, который обладает следующими свойствами:

 Module {
  id: '.',
  exports: {},
  parent: null,
  filename: 'C:\Users\Node\first-app\app.js',
  loaded: false,
  children: [],
  paths:
   [ 'C:\Users\app\node_modules',
     'C:\Users\\Node\node_modules',
     'C:\Users\node_modules',
     'C:\Users\Documents\node_modules',
     'C:\Users\node_modules',
     'C:\Users\node_modules',
     'C:\node_modules' ] }
  

Но каждый модуль также находится в формате функции как таковой:

 (function (exports, require, module, __filename, __dirname) { 
//content of the function
})
  

где функция принимает exports, require, module, __filename и __dirname в качестве своих параметров. Первый находится в формате ключа / значения, а второй — в формате определения функции. Какой это формат?

Комментарии:

1. » каждый модуль также находится в формате функции » — э-э, нет? Это просто IIFE, который инициализирует объект module, не более того. Функция не поддерживается, она не представляет модуль.

2. Я думаю, что функция всегда присутствует, потому что всякий раз, когда возникает синтаксическая ошибка, функция, такая как Function. Модуль. _загрузка и функция. Вызывается Module.runMain, нет?

3. Функция создается один раз при загрузке модуля, затем она вызывается для оценки исходного кода модуля, но затем она отбрасывается. Модуль ссылается только на объект module.

Ответ №1:

В ваших примерах кода представлены две разные, но связанные вещи. Первый — это объект module, который описан здесь. Второе — это то, что nodes выполняет внутренне: обертывание модуля в анонимную функцию, которая, помимо прочего, помогает ограничить переменные верхнего уровня в вашем модуле этим модулем, а не предоставлять их глобально. Это поведение переноса модуля описано здесь.