Одним из теоретических преимуществ работы с Node.js является возможность совместного использования одних и тех же сценариев между клиентами и сервером. Это позволит деградировать те же функции на сервере, если клиент не поддерживает javascript.
Однако метод Node.js require()
работает сам по себе. В загружаемом script вы можете добавить материал в this
или exports
, который позже будет доступен в объекте, который выбрал script:
var stuff = require('stuff');
stuff.show();
В stuff.js:
this.show = function() {
return 'here is my stuff';
}
Итак, при повторном использовании этого script на клиенте, метод .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 все еще очень новый (даже для меня), поэтому есть несколько надежных ресурсов. Кто-нибудь лучше знает, как это решить?