2015-01-15 2 views
0

Большинства языков используют директивы 'импорт', чтобы загрузить другой код модуля, как Java -Nodejs использует переменные назначения для загрузки модулей

import a.b.c 

Elisp -

(load a) 

питон -

from a import b 

Но почему nodejs использует переменное выражение для загрузки других функций модуля, таких как

var a = require('a') 

я вижу, большинство Иды для JavaScript, как tern.js-Emacs, nodeclipse которые не в состоянии сделать исходный код поиск (для загруженных модулей) правильно, потому что IDE должен запустить код (или) сделать Eval для узнать, какие свойства содержит объект загруженного модуля.

+2

ECMAScript 5.1 (https://es5.github.io/) - это язык Node.js. У него нет импорта. ES6 делает, и когда V8 поддерживает его, узел будет поддерживать его. Между тем есть ES6 -> ES5 конвертеры, которые позволяют вам использовать импорт в JS сегодня, если хотите. – generalhenry

+0

, чтобы вы могли использовать переменную для ссылки на возвращаемый объект. 'a.someMethodOfA();' например. – Todd

ответ

0

Вы можете сказать, что JS относится к категории языков, где идея о том, что все является объектом на равных основаниях, является частью «философии», которая руководила ее развитием. Node require - это функция (объект), предоставляемая средой, а также объект module. Этот шаблон называется Common JS format.

На самом деле вам не нужно назначать результат функции require переменной. Это редко встречается на практике, но модуль узла, который вы вызываете, может быть вызван, чтобы вызвать действие, например, может потребоваться использование файла sugar.js, который изменяет некоторые из собственных объектов, но не имеет собственных методов , поэтому не было бы смысла назначать возвращаемое значение (то есть объект module.exports, который был предоставлен во время выполнения этого модуля).

Более распространенный пример не присвоения модуля переменной - это когда используется require только для того, чтобы захватить некоторое свойство с модуля - например, var x = require('module').methodOfInterest. Аналогично, некоторые модули возвращают конструктор, поэтому иногда вы можете увидеть var instance = new (require('ConstructorModule'))(options) (что, на мой взгляд, уродливо, требования обычно должны быть сгруппированы в верхней части файла и действовать только потом).

Примечание: на ваш вопрос нет конкретного ответа, поэтому вероятность того, что он будет закрыт, как SO-несоответствующий.

Смежные вопросы