Одним из теоретических преимуществ работы с Node.js является возможность обмена одинаковыми сценариями между клиентами и сервером. Это позволило бы ухудшить те же функции на сервере, если клиент не поддерживает JavaScript.
Однако метод Node.js require()
работает сам по себе. В загружаемом скрипте вы можете добавить к this
или exports
материал, который позже будет доступен в объекте, который загрузил скрипт:
var stuff = require('stuff');
stuff.show();
В stuff.js:
this.show = function() {
return 'here is my stuff';
}
Таким образом, при повторном использовании этого сценария на клиенте метод .show()
будет добавлен в область действия window
. Это не то, что мы хотим здесь, вместо этого мы хотели бы добавить его в пользовательское пространство имен.
Мое единственное решение на данный момент - что-то вроде (в stuff.js):
var ns = typeof exports == 'undefined' ? (function() {
return window['stuff'] = {};
})() : exports;
ns.show = function() {
return 'here is my stuff';
}
delete ns; // remove ns from the global scope
Это работает довольно хорошо, так как я могу вызвать stuff.show()
на сервере и клиенте. Но это выглядит странно. Я пытался найти решения, но node.js все еще очень новый (даже для меня), поэтому надежных ресурсов мало. У кого-нибудь есть идеи как решить это?